python float除法”舍入误差”除以100

Python float division “rounding error” on division by 100

本问题已经有最佳答案,请猛点这里访问。

在python2.7中将float除以100时,我得到以下"舍入行为":

1
2
>>> 3.7e-03/100
3.7000000000000005e-05

我预计会出现以下情况:

1
2
>>> 3.7e-03/100
3.7e-05

注意:

1
2
3
4
>>> 3.7e-03/100 == 3.7e-05
False
>>> 3.7000000000000005e-05 == 3.7e-05
False

虽然在大多数应用程序中可能没有实际的区别,但我发现这种行为有些令人不安。

为什么会发生这种情况,我怎么才能避免呢?

我使用的是python:'2.7.5水蟒1.7.0(32位)(默认,2013年7月1日,12:41:55)[msc v.1500 32位(intel)]


这是众所周知的浮点数的缺陷。

你可以把二元浮点看成是两个分母幂的分数。即使是一个简单的数字,如0.1,也不能准确地表示为二进制浮点,而且每除以10的幂,本质上都是不准确的。

如果需要在python中使用任意分母进行精确划分,请使用Decimal(模拟铅笔和纸的小数)或Fraction(模拟铅笔和纸的分数)。