我試圖強制一個浮點數加到小數點後第二位。我知道這不是最好的做法,但這正是我正在開發的程序所需要的。因此,例如:python 2.7強制將小數點後兩位加起來
100.00 = 100.00
100.001 = 100.01
100.009 = 100.01
我已經得到相當接近我需要math.ceil結果和尖端我讀另一篇文章,但我遇到了一個問題,如果輸入數字已經完全以2個小數位結尾,則會不必要地湊齊。這裏有一個例子:
import math
taxpcnt = 1.12
roomsubtotal = 699.00
roomttl = math.ceil(taxpcnt * roomsubtotal * 100)/100
print roomttl
該相信還是會回到782.88,因爲699 * 1.12恰好是782.88,而是它返回782.89。韋爾德是如果我'打印taxpcnt * roomsubtotal',我得到782.88。如果我將代碼更改爲:
roomttl = math.ceil(782.88 * 100)/100
我得到正確的值。但有些原因,所有這一切都沒有計算正確。
關於如何正確獲取我想要實現的任何提示?
編輯:我覺得我已經拼湊起來的一個解決方案:
import math
taxpcnt = 1.12
roomsubtotal = 699.00
rate = "%.2f" % (taxpcnt * roomsubtotal * 100)
rate = float(rate)
roomttl = math.ceil(rate)/100
不知道這是最好的方法,但至少它似乎工作。
如果您正在處理金錢,請嘗試以美分(或便士,或任何您正在處理的貨幣)進行所有計算。所以,而不是782.88,使用78288,並在最後與字符串格式轉換。或者,使用Decimal.decimal()。 – MattDMo
此外,您可以使用round()而不是乘法和除以100,其中第二個參數是要舍入的數字。與Decimal混合應該爲您帶來一個簡單的解決方案。 – bgusach
@MattDMo:以分爲單位執行算術不能解決算術問題。如果算術使用浮點,它仍然有浮點錯誤。如果算術使用整數,它仍然有整數錯誤。例如,在這個問題中,貨幣數量乘以1.12。即使貨幣金額以美分計算,該產品也會包含12美分的倍數。在整數算術中會被截斷。然後,由於小數額已經丟失,因此目前不能四捨五入。 –