2017-08-25 150 views
0

有人可以解释这一点吗?Python四舍五入错误?

输入:

58/100*100 

结果:

57.99999999999999 

然而...

输入:

26/100*100 

结果:

26.0 

另外,我怎么能一致地得到像第二种情况下的结果?

+0

这不是Python错误。这就是浮点算法的工作原理。 –

+0

阅读[Python浮点不准确性](https://docs.python.org/2/tutorial/floatingpoint.html)。 – Mangohero1

+1

此问题是二进制浮点计算固有的。试试'Decimal'模块,它可以让你用十进制数学运算,不受这些影响,但速度较慢。 – kindall

回答

2

这都是由于浮点运算 以及python评估包含数字文字的表达式的方式的微妙变化。

由于python 3,您的表达式将以浮点计算;在此之前,将使用整数算术。

在IEEE754浮点上,0.58距离真值比0.26更远。这足以甩掉你的输出格式化程序正在使用的启发式。

在划分之前执行乘法可以在某些情况下有所帮助,并且可以在此处执行,因为产品可以精确地表示。