在python中从列表中添加数字

时间:2014-05-16 16:45:07

标签: python list sum

当我从列表中添加数字时,我得到额外的.00000000003。它来自哪里?

这是我的数字列表

list = [210.0, 140.0, 171.0, 70.0, 625.0, 187.5, 70.0, 1496.89]

当我得到所有数字的总和时,我得到2970.3900000000003

>>> sum(list)
2970.3900000000003

>>> total = 0
>>> for x in list:
...     total += x
... 
>>> total
2970.3900000000003

但是说我打印,总计是常规的

>>> total = 0
>>> for x in list:
...     total += x
...     print total
... 
210.0
350.0
521.0
591.0
1216.0
1403.5
1473.5
2970.39

那些额外的sig figs来自哪里?如何在其他地方使用它时避免使用它?

1 个答案:

答案 0 :(得分:1)

它来自浮点舍入。如果您需要精确的十进制数学运算,则必须使用Decimal

> sum([decimal.Decimal(f) for f in '210.0 140.0 171.0 70.0 625.0 187.5 70.0 1496.89'.split()])
Decimal('2970.39')

简短版本是您的分数(如1496.89)以二进制形式存储,而.89绝对不能表示为k / 2 ^ n。 Here's更长的文档,说明了同样的事情。

有时你可以通过使用python' %g格式化程序打印最终值来逃避这种情况,例如

> print '%g' % sum([210.0, 140.0, 171.0, 70.0, 625.0, 187.5, 70.0, 1496.89])
2970.39

很难找到你实际拥有的数字的简短表示(二进制)