Python浮动到int,int浮动到str

时间:2014-03-18 02:32:15

标签: string python-2.7 int floating

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

2 个答案:

答案 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