【问题标题】:Why .05+.01 == .06 return False in python 2.7.3? [duplicate]为什么 .05+.01 == .06 在 python 2.7.3 中返回 False? [复制]
【发布时间】:2014-01-11 13:26:58
【问题描述】:

根据我的预期 .05+.01 应该等于 .06 但在 python 中它不会发生。 作为.05+.01 = 0.060000000000000005,不等于.06

>>> .01+.01
0.02
>>> .02+.01
0.03
>>> .03+.01
0.04
>>> .04+.01
0.05
>>> .05+.01
0.060000000000000005  #expected .06
>>> .06+.01
0.06999999999999999  #expected .07
>>> .07+.01
0.08
>>> .08+.01
0.09
>>> .09+.01
0.09999999999999999 #expected .10
>>> 0.09999999999999999+.01
0.10999999999999999  #expected .11

这是什么原因?

【问题讨论】:

标签: python python-2.7


【解决方案1】:

因为0.010.05 不是他们想要的:

>>> import decimal
>>> decimal.Decimal(0.01)
Decimal('0.01000000000000000020816681711721685132943093776702880859375')
>>> decimal.Decimal(0.05)
Decimal('0.05000000000000000277555756156289135105907917022705078125')

【讨论】:

    【解决方案2】:

    您使用的值是浮点数,另请参阅:http://docs.python.org/2/tutorial/floatingpoint.html

    【讨论】:

      【解决方案3】:

      因为 Python 使用 IEEE-754 浮点数,这并不完全精确。标志性的例子是0.1 + 0.2 = 0.30000000000000004

      这是 Python 文档中的 well documented

      【讨论】:

        猜你喜欢
        • 2019-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-29
        • 2021-02-17
        • 2015-06-22
        • 2021-11-10
        相关资源
        最近更新 更多