我需要根据语言环境设置值。我将获得en_US
或fr_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.
请帮我解决格式问题。货币格式也有,
和.
的差异。
答案 0 :(得分:6)
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。
答案 1 :(得分:3)
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)));
有点冗长,呵呵:)