2011-12-26 52 views
3

我有要求根據區域設置值。我會的語言環境或者en_USfr_FR貨幣格式化加拿大英語和法語

String locale = object.getLocale(); // 

然後根據語言環境,我需要定義的貨幣。我需要的貨幣格式在下面定義。

Language   Example    Notes 
    Canadian French  123.456.789,99 $ symbol is a suffix,'comma' for decimal 
    Canadian English $123,456,789.99  symbol is a prefix,'dot' for decimal 

目前我有表單屬性,我直接在我的java類中設置值。

... 
    Form form = new Form(); 
    // Stub data for generating a graph. 
    formBean.setCurrOne("123.54"); 
    formBean.setCurrTwo("456.33"); 
      ....//before I set those attributes I need to place a check 
       // for locale and format the currency accordingly. 

你能幫我一下格式嗎?貨幣格式中的差異爲,.

回答

4
NumberFormat canadaFrench = NumberFormat.getCurrencyInstance(Locale.CANADA_FRENCH); 
NumberFormat canadaEnglish = NumberFormat.getCurrencyInstance(Locale.CANADA); 

BigDecimal amount = new BigDecimal("123456789.99"); 

System.out.println(canadaFrench.format(amount)); 
System.out.println(canadaEnglish.format(amount)); 

結果:

123 456 789,99 $ 
$123,456,789.99 

如果你真的不想使用默認格式(以空格作爲千​​個分隔符,而不是點),然後用

DecimalFormatSymbols symbols = ((DecimalFormat) canadaFrench).getDecimalFormatSymbols(); 
symbols.setGroupingSeparator('.'); 
((DecimalFormat) canadaFrench).setDecimalFormatSymbols(symbols); 

見,這一切都是由NumberFormat類完成的,只要你給它適當的語言環境。 fr_FR是指法國的法國人,而不是加拿大的法國人。你需要fr_CA。而en_US是指美國的英語,而不是加拿大的英語。你需要en_CA。

+0

可以這樣使用'org.springframework.format.number.CurrencyFormatter '任何例如做些什麼呢? – 2011-12-28 05:49:37

2

Joda Money爲支持不同貨幣的專門格式化提供了一個很好的模型。示例代碼:

CurrencyUnit canadianFrench = CurrencyUnit.getInstance(Locale.CANADA_FRENCH); 
CurrencyUnit canadianEnglish = CurrencyUnit.getInstance(Locale.CANADA); 

MoneyFormatter canadianFrenchFormat = new MoneyFormatterBuilder(). 
     appendAmount(MoneyAmountStyle.ASCII_DECIMAL_COMMA_GROUP3_DOT). 
     appendLiteral(" $"). 
     toFormatter(); 
MoneyFormatter canadianEnglishFormat = new MoneyFormatterBuilder(). 
     appendLiteral("$"). 
     appendAmount(MoneyAmountStyle.ASCII_DECIMAL_POINT_GROUP3_COMMA). 
     toFormatter(); 

System.out.println(canadianFrenchFormat.print(Money.of(canadianFrench, 123456789.99))); 
System.out.println(canadianEnglishFormat.print(Money.of(canadianEnglish, 123456789.99))); 

有點冗長,呵呵:)

+0

這可以使用'org.springframework.format.number.CurrencyFormatter '完成嗎?任何幫助 – 2011-12-28 05:49:10

+0

這個答案真的很有幫助,我想問的一個問題是我們如何添加formatter的負數?我需要(900.00,00)-90000.00的情況 – 2015-07-15 07:19:18

+0

@Sanjaya Pandey似乎沒有辦法用joda-money(v0.10)做到這一點。您可以在「MoneyAmountStyle」中設置negativeCharacter,但這對您所尋找的格式無濟於事。 – 2015-07-22 18:24:59