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

Why .05+.01 == .06 return False in python 2.7.3?

本问题已经有最佳答案,请猛点这里访问。

按照我的预期,0.05+.01应该等于0.06,但在python中,它不发生。如.05+.01 = 0.060000000000000005,不等于.06

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浮点数,这并不十分精确。典型的例子是0.1 + 0.2 = 0.30000000000000004

这在python文档中有很好的文档记录。


因为0.010.05不是他们所看到的:

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