2014-05-16 50 views
0

当我从列表中添加数字时,我得到一个额外的.00000000003。这是从哪里来的?从python列表中添加数字

这里是我的号码列表

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 

这些额外的信号从哪里来,我怎么能避免它在其他地方使用?

回答

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分数被存储在二进制,和0.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 

它试图很难找到数量的短表示你确实有(这是二进制)