Python 简单求和的舍入误差

6 投票
2 回答
6084 浏览
提问于 2025-04-17 21:31
>>> sum([0.3, 0.1, 0.2])
0.6000000000000001

>>> sum([0.3, 0.1, 0.2]) == 0.6
False

我该怎么做才能让结果正好是0.6?我不想把结果四舍五入到某个小数位数,因为那样可能会影响到其他列表的精确度。

2 个回答

-2

math.fsome() 替代 sum()

7

float(浮点数)在几乎所有编程语言中都是不精确的,因为它不能在二进制中被准确表示。

如果你需要完全精确的数值,可以使用 Decimal class(十进制类):

from decimal import Decimal

num1 = Decimal("0.3")
num2 = Decimal("0.2")
num3 = Decimal("0.1")

print(sum([num1, num2, num3]))

这样会得到一个非常令人满意的结果:

Decimal('0.6')  # One can do float() on this output to get plain (0.6).

而且这个结果也是一个 Decimal 对象,你可以用它进行进一步的操作。

撰写回答