7

ロケールに基づいて値を設定する必要があります。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.

フォーマットを手伝ってくれませんか。また、通貨形式には,との違いがあります。.

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

デフォルトの形式 (ドットではなくスペースを 1000 区切りとして使用) を本当に使用したくない場合は、次を使用します。

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 に答える