【问题标题】:Why does '0.2 + 0.1' show as '0.30000000000000004'? [duplicate]为什么“0.2 + 0.1”显示为“0.30000000000000004”? [复制]
【发布时间】:2014-07-10 07:18:48
【问题描述】:

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

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]

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

【问题讨论】:

标签: python floating-point append decimal


【解决方案1】:

这就是浮点数的工作原理。您不能在有限的位数中表示无限数量的实数,因此存在一些截断。你应该看看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) 作为一位数)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 2014-05-05
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    相关资源
    最近更新 更多