python十进制精度

mar*_*rat 6 python

由于某种原因,Decimal对象在乘以时会失去精度.没有理由这样发生.请检查测试用例并启发我.

from decimal import *
getcontext().prec = 11

a = Decimal('5085.28725881485')
b = 1

print getcontext()
print 'a     = '+str(a)
print 'b     = '+str(b)
print 'a * b = '+str(a * b)
Run Code Online (Sandbox Code Playgroud)

并输出:

Context(prec=11, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999, capitals=1, flags=[], traps=[DivisionByZero, InvalidOperation, Overflow])
a     = 5085.28725881485
b     = 1
a * b = 5085.2872588
Run Code Online (Sandbox Code Playgroud)

不确定这是否相关,但是使用了python2.6.

Tho*_*ers 11

您在上下文中指定的精度(11个位置)仅在执行计算时应用,而不是在创建decimal.Decimal对象时应用 - 并且结果5085.2872588确实遵守该限制.使用1乘数不会改变关于精度的规则; 算术运算的结果总是考虑精度.

如果您正在寻找decimal.Decimal将四舍五入的数字返回到特定数量的位置,create_decimal则上下文对象的方法将为您执行此操作.