Why .05+.01 == .06 return False in python 2.7.3?
本问题已经有最佳答案,请猛点这里访问。
按照我的预期,0.05+.01应该等于0.06,但在python中,它不发生。如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | >>> .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使用的是IEEE-754浮点数,这并不十分精确。典型的例子是
这在python文档中有很好的文档记录。
因为
1 2 3 4 5 | >>> import decimal >>> decimal.Decimal(0.01) Decimal('0.01000000000000000020816681711721685132943093776702880859375') >>> decimal.Decimal(0.05) Decimal('0.05000000000000000277555756156289135105907917022705078125') |
您使用的值是浮点数,另请参见:http://docs.python.org/2/tutorial/floating point.html