为什么.05 + .01 == .06在python 2.7.3中返回False?

时间:2013-12-23 10:33:07

标签: python python-2.7

根据我的预期.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

这是什么原因?

3 个答案:

答案 0 :(得分:9)

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

这是Python文档中的well documented

答案 1 :(得分:4)

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

答案 2 :(得分:4)

因为0.010.05不是他们所期待的:

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