7

我需要根据语言环境设置值。我将获得语言环境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

2 回答 2

8
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。

于 2011-12-26T11:36:37.480 回答
4

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)));

有点啰嗦,呵呵:)

于 2011-12-27T12:41:39.407 回答