为什么在Python中分割2 / 5.0时会出错?

时间:2010-02-12 09:41:08

标签: python division

  

可能重复:
  Python float - str - float weirdness

在python中,2/5.02/float(5)会返回0.40000000000000002

为什么我最后会收到错误,如何在其他计算中使用正确的值?

5 个答案:

答案 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。正确的方法是

  1. 使用整数直到“最终”计算
  2. 与舍入错误一起生活。