Python 简单求和的舍入误差
>>> 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
对象,你可以用它进行进一步的操作。