小数在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())