用float数字Python舍入错误
这个问题在这里已经有了答案:
任何不能用精确的二次幂构建的数字都不能完全表示为浮点数; 它需要近似。 有时最接近的近似值会小于实际值。
阅读每位计算机科学家应该了解的浮点运算。
它由于浮点数的性质而广为人知。
如果你想做十进制算术而不是浮点算术,有库可以做到这一点。
例如,
>>> from decimal import Decimal
>>> Decimal(29)/Decimal(100)
Decimal('0.29')
>>> Decimal('0.29')*100
Decimal('29')
>>> int(Decimal('29'))
29
一般来说,小数可能会过大,并且在数字不具有有限小数表示的情况下(例如,分母不是1或可被2或5整除的任何分数 - 十进制基数的因子(10))。 例如:
>>> s = Decimal(7)
>>> Decimal(1)/s/s/s/s/s/s/s*s*s*s*s*s*s*s
Decimal('0.9999999999999999999999999996')
>>> int(Decimal('0.9999999999999999999999999996'))
0
因此,除非您需要发言权函数,否则在将浮点数转换为整数之前,最好始终进行一轮调整。
>>> int(1.9999)
1
>>> int(round(1.999))
2
另一种替代方法是使用分数库中的分数类,它不是近似的。 (它只是在必要时加/减和乘以整数分子和分母)。
链接地址: http://www.djcxy.com/p/27451.html