5

NumberFormat.getCurrencyInstance().format(amount)通貨を BigDecimal から文字列にフォーマットするために使用しています。これは期待どおりに機能します。問題は、主なターゲットがオランダ市場であり、デフォルトのオランダ語の書式がおかしいことです。

-125 をフォーマットすると、オランダ語で "€ 125-" と表示されます (予想は "-€125" でした)。UK は期待通りに動作し、"-£125.50" を与えます。

ロケールがオランダ語かどうかを確認し、小数をフォーマットするたびにパターンを指定できます。しかし、オランダ語の書式設定を上書きするソリューションを好むでしょう。次のようなことを考えていました。

Locale nlLocale = new Locale("nl", "NL");
NumberFormat.getCurrencyInstance(new Locale("nl", "NL")).setFormatPattern("€ #");

そのため、書式設定時にオランダ語ロケールを使用するたびに、カスタム書式が取得されます。同様のソリューションは存在しますか?

4

2 に答える 2

2

その特定の形式が「正しい」かどうかの問題は別として、「nl」ロケールの通貨インスタンスを変更する方法はLocaleServiceProvider、数値形式サービスのカスタムを実装して構成することです。(プロバイダー クラスは をサブクラス化する必要NumberFormatProviderがありますが、スーパークラスの javadoc でプロバイダーの構成方法が説明されています。)

NumberFormatプロバイダーは、懸念している特定のケースに対して非標準のインスタンスを返す必要がありますが、(おそらく) 他のケースではデフォルト プロバイダーに委譲します。

于 2012-10-27T10:29:14.550 に答える
0

applyPatternメソッドを使用します。

final DecimalFormat df = (DecimalFormat)NumberFormat.getCurrencyInstance(locale);
df.applyPattern("¤#,##0.##");
于 2016-09-29T06:08:50.780 に答える