2013-04-13 60 views
2

我想根據accept-language頭來格式化貨幣,但我遇到了一些麻煩。格式化java中各種語言環境的給定貨幣? (舍入問題)

  1. 的英語(美國)的用戶會明白€10,000,000.15但不是適合換德國相當於€10.000.000,15

  2. 在另一方面,「$ 23123看起來」精細到英語 - 美國用戶,但「23123.00美元」看起來很奇怪。 「23,23,00日元」也是如此。後者是我所得到的使用下面的代碼:

    java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.US); 
    format.setCurrency(java.util.Currency.getInstance("JPY")); 
    
  3. 更令人不安的是,當我在Ja_JP表示顯示美元出現這種情況的舍入。 如果我格式化7.95,它只是顯示爲「USD8」而不是「USD7.95」

有沒有什麼簡單的方法來避免這種情況?有格式化貨幣的更好的庫嗎?我是否應該將其格式化爲區域設置的數字(如果貨幣不是區域設置的默認值),然後在貨幣代碼或符號前添加?

+0

你最好的例子更好地轉化爲真正的代碼。例如,你如何得到「23,123美元」,你期望的結果是什麼。這會讓問題更清楚。 – yehe

回答

3

默認情況下,對於Locale.US,對於Locale.US和10.000.000,15 €,顯示10000000.15歐元是EUR10,000,000.15,對於Locale.GERMANY而言似乎是正確的。

USD8只需7.75美元,即使對於日本來看也很奇怪。但是,這可以是固定的:

NumberFormat format = NumberFormat.getCurrencyInstance(locale); 
    format.setCurrency(currency); 
    format.setMaximumFractionDigits(currency.getDefaultFractionDigits()); 
    System.out.println(format.format(7.95)); 

它打印USD7.95日本/美元和JPY8美國/ JPY

+0

太棒了。這正是我所期待的。我也最終做了format.setMinimumFractionDigits(currency.getDefaultFractionDigits()),使它* always *顯示默認的位數。 (因此7.50美元將顯示爲7.50美元而不是7.5美元) –