1

在 Python 2.7 中将浮点数除以 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 位(英特尔)]'

4

1 回答 1

2

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

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

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

于 2013-10-31T10:20:53.323 回答