python十进制精度

python十进制精度,python,Python,由于某种原因,十进制对象在相乘时会失去精度。没有理由这样做。请检查测试用例并告诉我 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) 以及输出: Context(prec=11, roun

由于某种原因,十进制对象在相乘时会失去精度。没有理由这样做。请检查测试用例并告诉我

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)
以及输出:

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

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

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


如果您正在查找
decimal.decimal
以返回四舍五入到特定位数的数字,则上下文对象的
create\u decimal
方法将为您完成此操作。

将精度设置为11,结果中有11个有效数字。问题是什么?精度不是指点后的数字吗?有没有办法将精度限制为点后的数字?