在python中,2/5.0
或2/float(5)
会返回0.40000000000000002
为什么我最后会收到错误,如何在其他计算中使用正确的值?
答案 0 :(得分:22)
欢迎使用IEEE754,enjoy your stay。
改为使用decimal
。
答案 1 :(得分:3)
因为浮点运算不精确。您应该在附加计算中使用此值,并在完成后将结果四舍五入。如果您确切需要它,请使用其他数据类型。
答案 2 :(得分:2)
上面的Ignacio有正确的答案。
有一些IEEE标准可以有效地将浮点数存储到二进制计算机中。这些都是关于数字存储方式的详细信息,几乎每台计算机都遵循这些规则。
他们也错了。二进制数不能处理大多数正常数,只能处理2的幂。标准选择效率,而不是做一些棘手的事情,需要重新计算底部位以进行四舍五入或其他技巧。
这样,您可以诅咒运行速度稍快的系统。关于以某种方式改变Python来解决这些问题,偶尔会有争论,但如果没有效率的巨大损失,答案就不是微不足道的。
解决这个问题:
一种选择是深入研究标准库的“十进制”包。如果您坚持使用示例并忽略长页面,它将为您提供所需的内容。没有赌注效率。
其次是在一个输出函数中进行手动舍入和字符串截断。如果你从不打印这些数字,谁会关心这个数字是否有点偏差?
答案 3 :(得分:2)
请注意,Python 3.1有一个新的浮点格式化函数,可以避免这种外观。有关详细信息,请参阅What's new in Python 3.1(搜索“浮点数”)。
答案 4 :(得分:1)
有关说明,请参阅this question。正确的方法是