2014-05-16 51 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 

它試圖很難找到數量的短表示你確實有(這是二進制)