【问题标题】:Python float to int, and int to strPython浮点到int,int到str
【发布时间】:2014-04-23 12:59:20
【问题描述】:
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))

它打印'8'

谢谢你! :D

【问题讨论】:

    标签: string python-2.7 int floating


    【解决方案1】:

    因为.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
    

    【讨论】:

    • 值得补充的是,int 截断为零,而不是四舍五入。这就是为什么int(7.9)7,而不是8
    【解决方案2】:

    那是因为浮点的设计。 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

    【讨论】:

    • 这条评论是如何添加之前答案中没有的(这也非常相似)或评论中已经说明的任何新信息?
    • 当我发布它时,我没有注意到已经有答案。无论如何,至于您的问题:它提供了指向 python 文档的链接,这些链接在上面的答案中不存在……所以我想说它提供了更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2021-03-18
    相关资源
    最近更新 更多