记一次python实践中遇到的浮点数的坑

先看代码:

i = 1
while i != 1.5:
    print(i)
    i += 0.1

上面的代码输出是多少?正确答案是无限循环输出。

1
1.1
1.2000000000000002
1.3000000000000003
1.4000000000000004
1.5000000000000004
1.6000000000000005
1.7000000000000006
1.8000000000000007
1.9000000000000008
2.000000000000001
2.100000000000001
2.200000000000001
2.300000000000001
2.4000000000000012
2.5000000000000013
2.6000000000000014
2.7000000000000015
2.8000000000000016
2.9000000000000017
3.0000000000000018
3.100000000000002
...

原因就在于0.1不是精确表示,在循环到第5次的时候,i的实际值是1.5000000000000004。所以此程序根本就没有跳出while循环的机会。

在计算机的世界里,浮点数的存储规则决定了不是所有的浮点数都能够精确表示。有些不能精确表示的,只能无限接近,比如0.1转换成二进制是0.00011001100110011...其中0011是无限循环的。

所以在while中 !=1.5 这种表达式是要避免的。浮点数的比较同样最好能够指明精度。

你可能感兴趣的:(记一次python实践中遇到的浮点数的坑)