w = 0
while w <= 1.0:
print str(int(w*10))
w += 0.1
为什么这个答案是 0 1 2 3 4 5 6 7 7 9 9 哪里是8和10?
我只是用
print str(int(0.8*10))
打印&#39; 8&#39;
谢谢你! :d
答案 0 :(得分:3)
因为.1
不能用二进制表示,所以有一些舍入错误。让我们尝试不同的脚本:
w = 0
while w <= 1.0:
print repr(w)
w += 0.1
它打印什么?
0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
答案 1 :(得分:1)
这是因为浮点的设计。 0.1是一个分数,不能完全表示为二元(基数2)分数。
亲自看看,我的意思是:
我删除了转换为int和无法转换为str:
w = 0
while w <= 1.0:
print(w*10)
w += 0.1
打印:
0
1.0
2.0
3.0000000000000004
4.0
5.0
6.0
7.0
7.999999999999999
9.0
9.999999999999998
将float转换为int总是只是在点之后切断部分, 它将打印7和9两次。
有关详细信息,请参阅http://docs.python.org/2.7/tutorial/floatingpoint.html#tut-fp-issues。 特别是:http://docs.python.org/2.7/tutorial/floatingpoint.html#representation-error