1

这是我编写的一个更大的程序中的一个小故障,我无法弄清楚。我正在使用 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))

我知道有很多解决方法,但我仍然很好奇为什么会发生这种情况。它是用于对原始数据的输出文件进行排序的文件命名功能的一部分。提前致谢!

4

1 回答 1

2

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

还有一个 Python 特定的教程: http ://docs.python.org/2/tutorial/floatingpoint.html

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

于 2013-08-08T04:39:55.530 回答