为什么“0.2 + 0.1”显示为“0.30000000000000004”?

Fer*_*rez 2 python floating-point append decimal

我编写了以下代码来生成带浮点数的范围:

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

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

print drange(0.1,1.0,0.1)
Run Code Online (Sandbox Code Playgroud)

我希望得到这个:

[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
Run Code Online (Sandbox Code Playgroud)

但我得到以下信息:

[0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999, 0.9999999999999999]
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*lla 7

这就是浮点数的工作原理。你不能用有限的位数表示无限多的实数,所以有一些截断。你应该看看每个程序员应该知道的关于浮点运算的知识

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

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

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

用于round(number, k)将给定的浮点值四舍五入为k小数点后的数字(因此在您的情况下,使用round(number, 1)一位数字)。