2013-08-30 26 views
-1

我必須對Money執行操作(基本上是美元)。我必須得到產品的價格,然後再乘以數量,並以同樣的方式進行交易。如何在Android應用程序中保存和計算Doller

目前我正在使用和在某些地方浮動執行金額操作。他們給我輸出像13.789689,但我只需要最多2位數字。所以我已經申請了

String value = String.format(Locale.ENGLISH, "%.2f", 13.789689); 

得到最多2位數。但現在的問題是結果不準確。 此外我要將交易信息保存到數據庫中,並顯示Cash和CC trans的變化。 我非常沮喪,因爲它的操作與金錢,我失去了這一點。請指導我在這種情況下做得最好。

+2

你永遠不應該使用浮點數用錢,因爲你可以得到的舍入誤差。相反,使用整數類型(通常是「長」)來表示最小部分(例如美分)並重新格式化以供顯示。 – chrylis

+0

@chrylis然後什麼是節省美元和執行計算的最佳方式 –

+2

不要節省美元。保存美分,這是確切的,並使用「長」。 – chrylis

回答

3

沒有什麼特定於android。在Java中,建議所有貨幣計算是由BigDecimal數據類型來進行,這樣不會有,你會面臨floatdouble

這裏有幾個環節,可以幫助任何四捨五入問題你12,3

3

不要使用floatdouble爲任何金錢相關,如果你需要確切的結果(你可能會這樣做)。改爲嘗試BigDecimal

+0

'BigDecimal'可能會工作,但處理起來相當昂貴。 「長」通常很多。 – chrylis

+0

當您將美元轉換爲歐元或您計算年度百分比率的月利息或需要除簡單加法,減法和乘法之外的任何計算時,'BigDecimal'不準確。 –

+0

@EricPostpischil Long對於這些操作也不準確。 BigDecimal算術確實具有實踐中需要的東西,意味着對每個不精確的計算執行適當的舍入規則。 Long只支持截斷,這很少適用。 –

0

您可以使用DecimalFormat對於這一點,即

Double d=13.789689 
    DecimalFormat deciFor= new DecimalFormat("##.##"); 
    String value=deciFor.format(d); 

結果值將是13.79

相關問題