为什么Python将`0.2 + 0.1`显示为`0.30000000000000004`?

时间:2014-07-10 07:18:49

标签: python floating-point append decimal

我编写了以下用于生成浮点数的代码:

def drange(start, stop, step):
    result = []
    value = start
    while value <= stop:
        result.append(value)
        value += step
    return result

使用此语句调用此函数时:

print drange(0.1,1.0,0.1)

我希望得到这个:

[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]

但我获得以下内容,而不是:

[0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999, 0.9999999999999999]

为什么会这样?,我该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:4)

浮点数的工作原理。您无法在有限数量的位中表示无限数量的实数,因此存在一些截断。你应该看看 What Every Programmer Should Know About Floating-Point Arithmetic

  

为什么我的数字,如0.1 + 0.2加起来不是很好的一轮0.3,而是我得到一个奇怪的结果,如0.30000000000000004?

     

因为在内部,计算机使用的格式(二进制浮点)无法准确表示0.1,0.2或0.3之类的数字。

     

编译或解释代码时,“0.1”已经四舍五入到该格式的最接近数字,即使在计算发生之前也会导致小的舍入误差。

使用round(number, k)将给定的浮点值舍入到小数点后的k位数(所以在您的情况下,使用round(number, 1)一位数)。