我試圖解析和存儲貨幣金額爲BigDecimal
值。我給出了有問題的貨幣區域,在大多數情況下它運行良好,但當貨幣是哥斯達黎加科隆時,我得到了意想不到的結果。貨幣:小數位數意外爲零
我的哥斯達黎加客戶通知我,典型貨幣金額可能看起來像1.508.534,16
,,16
是小數部分(小數點後兩位)。但是,當我撥打Currency.getDefaultFractionDigits()
時,它將返回0
而不是2
作爲小數位數。因此,我正在計算的值被錯誤地截斷。
代碼如下所示:
// currencyLocale is "es_CR"
Currency currency = Currency.getInstance(currencyLocale);
int scale = currency.getDefaultFractionDigits();
// scale is 0 instead of 2
BigDecimal v = new BigDecimal("12.34")
.setScale(scale, BigDecimal.ROUND_HALF_DOWN);
// gives 12 instead of 12.34
注意,雖然最終用戶可見的金額是否正確格式化的語言環境與,
作爲小數點分隔符,數據源這裏提供的值作爲標準1234.56
十進制數。
我在做什麼錯?
UPDATE
做一些更多的研究後,和reporting the issue to Google,我現在確信,這是一個Android的bug。谷歌的迴應是,這是按預期運作的,因爲受影響的貨幣只能用於整數倍數(最小的硬幣是5科隆)。
谷歌的迴應忽略了一個事實,你可以很合理地有分數金額在您的銀行帳戶,不過,電匯,利息計算的結果等
你是否在實際設備和仿真器上得到了相同的結果?我遇到了與模擬器上的預期設置不同的Locale問題 – Kennet 2012-07-16 13:57:58
是的,模擬器上的結果相同。 – 2012-07-16 23:02:46