【问题标题】:python Decimal precisionpython 小数精度
【发布时间】:2011-06-26 10:42:58
【问题描述】:

由于某种原因,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)

还有输出:

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,结果中有 11 个有效数字。有什么问题?
  • 精度不是指点后的数字吗?
  • 那么有什么办法可以将精度限制为点之后的数字吗?

标签: python


【解决方案1】:

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

如果您正在寻找 decimal.Decimal 以返回四舍五入到特定位数的数字,则上下文对象的 create_decimal 方法将为您完成。

【讨论】:

    猜你喜欢
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 2013-07-17
    相关资源
    最近更新 更多