2013-03-06 87 views
8

我正在寫一個類來表示金錢,我遇到的一個問題是"1.50" != str(1.50)。 str(1.50)等於1.5,突然出現POOF。 45美分已經消失,現在金額爲1美元和5美分。不是一美元和50美分。任何方式,我可以阻止str這樣做,或者我做錯了什麼?這是Python 2順便說一句。在python中保留尾隨零

+1

這說明了一個重要的觀點:1美元5美分是**不等於,例如1.5磅的體重。 1.5磅和1.50磅是完全一樣的東西,你很少關心1.5磅和1.50001磅之間的差異。這是因爲「磅」是測量*連續*數量(重量),而「美分」是測量*離散*數量。 – 2013-03-06 03:07:00

+0

不好的班級設計再次敲擊... – 2015-11-09 03:38:13

回答

19

您可以使用字符串format方法來指定你要多少位小數來表示:

>>> "{:.2f}".format(1.5) 
'1.50' 

但更好的辦法是使用了decimal module爲代表的錢,因爲代表如果你正在做算術,二進制浮點數的問題會給你稍微的結果。該模塊的文檔中提到的一些問題特別是 - 最有趣的錢應用之一是:

>>> 0.1+0.1+0.1-0.3 
5.551115123125783e-17 
>>> from decimal import Decimal 
>>> Decimal('.1') + Decimal('.1') + Decimal('.1') - Decimal('.3') 
Decimal('0.0') 
+0

或只是'「%.2f」%1.5' – grc 2013-03-06 03:01:46

1
x = 1.500000 

print '%.2f' % x 
print '{:.3f}'.format(x) 

結果

1.50 
1.500