为什么在Python中划分2/5.0时会出现错误?

为什么在Python中划分2/5.0时会出现错误?,python,division,Python,Division,可能重复: 在python中,2/5.0或2/float(5)返回0.40000000000000002 为什么我会在最后得到这个错误,以及如何得到正确的值以用于其他计算?欢迎使用IEEE754 请改用。有关说明,请参阅。正确的方法是 使用整数直到“最终”计算 生活在舍入误差中 因为浮点运算是不精确的。您应该在附加计算中使用此值,并在完成后对结果进行四舍五入。如果需要精确,请使用其他数据类型。上面的Ignacio有正确答案 有IEEE标准可以有效地将浮点数存储到二进制计算机中。关于数字是如何存

可能重复:

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

为什么我会在最后得到这个错误,以及如何得到正确的值以用于其他计算?

欢迎使用IEEE754

请改用。

有关说明,请参阅。正确的方法是

  • 使用整数直到“最终”计算
  • 生活在舍入误差中

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

    上面的Ignacio有正确答案

    有IEEE标准可以有效地将浮点数存储到二进制计算机中。关于数字是如何存储的,这些都非常详细,几乎每台计算机都遵循这些规则

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

    这样,你可以诅咒你的系统运行稍微快一点。偶尔会有关于以某种方式改变Python来解决这些问题的争论,但答案并非微不足道,而是会造成巨大的效率损失

    绕过这个问题:

    一个选择是挖掘标准库的“十进制”包。如果你坚持使用这些例子,而忽略了长页面,那么你就会得到你想要的。没有效率的赌注


    第二种方法是在一个输出函数中手动进行舍入和字符串截断。如果从不打印这些位,谁会在乎数字是否有点不正确呢?

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

    +1(指向)对不幸事实的解释。这是一个有用的解决方案。简明扼要地说,本教程的这一部分解释了这个问题,使用
    decimal
    代替python是一个可怕的建议。十进制数也有同样的问题(例如,如果您试图表示2/3而不是2/5),但是
    Decimal.Decimal
    与许多软件包不兼容,速度慢,在语法上要处理更多的麻烦。请阅读:每一位计算机科学家都应该知道的关于浮点运算的知识python教程解释:重复了几十个问题。请搜索。所有这些:。具体来说:使用
    十进制
    并不能解决这个问题。十进制数不能像二进制浮点数那样代表所有的有理数。只需将示例从2/5改为2/3即可。