Decimal模块:小数的处理

Decimal模块:小数的处理

小数在Python自带的float类型有很大的误差,就需要Decimal模块来处理。

Decimal的定义:

>>> fromdecimalimport*

>>>x=Decimal('0.70')*Decimal('1.05')

>>> x

Decimal('0.7350')

注意:一般是str类型转为decimal类型,而不是float直接转。

 

Decimal的舍入方式:

#quantize:decimal模块中的round方法

>>> x.quantize(Decimal('0.01'))#round to nearest cent

Decimal('0.74')

>>>Decimal('7.325').quantize(Decimal('1.'),rounding=ROUND_UP)

Decimal('8')

舍入方式:ROUND_CEILING, ROUND_DOWN, ROUND_FLOOR, ROUND_HALF_DOWN,ROUND_HALF_EVEN, ROUND_HALF_UP, ROUND_UP, and ROUND_05UP.

 

配置的改变:

# getcontext方法:查看和设置基本参数。比如设置想得到的小数后精确位数。

>>> getcontext().prec=36

>>> Decimal(1)/Decimal(7)

Decimal('0.142857142857142857142857142857142857')

getcontext().rounding = ROUND_UP

整体的转换:

my_context=Context(prec=60,rounding=ROUND_HALF_DOWN)

setcontext(my_context)  #转换为my_context

#模块自定义了常量BasicContext,ExtendedContext,DefaultContext

#本质:ExtendedContext =getcontext(BasicContext).clear_flags()

setcontext(ExtendedContext)#转换为ExtendedContext

 

其他-string批转为Decimal:

data = map(Decimal, '1.34 1.87 3.45 2.351.00 0.03 9.25'.split())

 

你可能感兴趣的:(Python-module)