3

可能重复:
Python float - str - float 怪异

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

为什么最后会出现该错误,如何获得正确的值以用于其他计算?

4

5 回答 5

22

欢迎来到 IEEE754,祝您逗留愉快。

改为使用decimal

于 2010-02-12T09:43:42.307 回答
3

因为浮点运算并不精确。您应该在附加计算中使用此值,并在完成后对结果进行四舍五入。如果您需要准确,请使用其他数据类型。

于 2010-02-12T09:44:48.340 回答
2

上面的伊格纳西奥有正确的答案。

有 IEEE 标准可以有效地将浮点数存储到二进制计算机中。这些详细说明了数字的存储方式以及几乎每台计算机都遵循这些规则。

他们也错了。二进制数不能处理大多数普通数,只能处理 2 的幂。标准选择了效率,而不是做一些需要重新计算底部位以进行舍入或其他技巧的棘手事情。

这样,您就可以诅咒您的系统运行速度稍快。偶尔会有关于以某种方式改变 Python 以解决这些问题的争论,但如果没有效率上的巨大损失,答案并非微不足道。

解决这个问题:

一种选择是深入研究标准库的“十进制”包。如果您坚持示例并忽略长页面,它将为您提供所需的内容。不赌效率。

其次是在一个输出函数中进行手动舍入和字符串截断。如果您从不打印这些位,谁会在乎数字是否有点偏离?

于 2010-02-12T10:28:11.417 回答
2

请注意,Python 3.1 有一个新的浮点格式化函数,可以避免出现这种情况。有关更多详细信息,请参阅Python 3.1 中的新增功能(搜索“浮点数”)。

于 2010-02-13T01:06:39.453 回答
1

请参阅此问题以获取解释。正确的方法是

  1. 在“最终”计算之前使用整数
  2. 忍受舍入错误。
于 2010-02-12T09:44:42.343 回答