Python浮点除法“舍入错误”除以100

时间:2013-10-31 10:13:41

标签: python python-2.7 floating-point division floating-accuracy

在Python 2.7中将float除以100时,我得到以下“舍入行为”:

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

我希望如下:

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

请注意:

>>> 3.7e-03/100 == 3.7e-05
False
>>> 3.7000000000000005e-05 == 3.7e-05
False

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

为什么会发生这种情况,我该如何避免呢?

我正在使用Python: '2.7.5 | Anaconda 1.7.0(32位)| (默认,2013年7月1日,12:41:55)[MSC v.1500 32位(英特尔)]'

1 个答案:

答案 0 :(得分:1)

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

您可以将二进制浮点视为具有二次幂分母的分数。即使像0.1这样的简单数字也不能准确地表示为二进制浮点数,并且每次除以10的幂本质上都是不准确的。

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