Python int(90.0)= 89错误

时间:2013-08-08 04:36:59

标签: python int

这是我写的一个我无法弄清楚的更大程序中的一个小故障。我正在使用Python 2.7。

n = 0.5
while n < 2:
    print(int(n * 100))
    n += 0.1

90,100和110的输出偏离1。 截断输出: 50, 60, 70, 80, 89, 99, 109, 120, 130, 140, ...

当我a)从n = 0.8开始,b)直接打印浮点数,或c)不使用循环增加n时,不会发生这种情况:

n = 0.9
print(int(n * 100))

我知道有很多工作要做,但我仍然很好奇为什么会这样。它是用于订购原始数据输出文件的文件命名函数的一部分。提前谢谢!

1 个答案:

答案 0 :(得分:2)

浮点运算是不精确的。有很多很多资源可以解释原因 - 这是一个一般的起点:http://en.wikipedia.org/wiki/Round-off_error

特定于Python的教程: http://docs.python.org/2/tutorial/floatingpoint.html

如果您需要精确的十进制数表示,请使用decimal内置库。通常你没有,但是如果你需要它就在那里。