22

10.0 などの金額に相関する値が DB に格納されています。Currency/CurrencyCode にもアクセスできます。ロケールがわからない場合、NumberFormat/DecimalFormat/(other?) を使用してフォーマットするにはどうすればよいですか? ドキュメントによると、外国通貨では機能しないデフォルトのロケールが選択されます。

4

4 に答える 4

29

JasonTrue は正しいですが、NumberFormat のロケールの通貨をオーバーライドできます。

NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale);
//the user may have selected a different currency than the default for their locale
Currency currency = Currency.getInstance("GBP");
numberFormat.setCurrency(currency);
numberFormat.format(amount);
于 2011-05-19T22:29:44.913 に答える
19

一般的に言えば、正しい動作は、通貨の典型的なロケールではなく、ユーザーの優先ロケールで金額をフォーマットすることです。クライアント側では、ユーザーの設定 (Locale.getDefault()) があります。Web サーバー側で何かを行っている場合は、Accept-Language を使用するか、できればページ コンテンツのロケールを使用して、適切なロケールを取得します。

理由は次のとおりです。英語の米国ユーザーは 10,000,000.15 ユーロを理解しますが、ドイツに相当する 10.000.000.15 ユーロは理解できません。

とにかく、通貨自体には、適切なロケールを推測するのに十分な情報が含まれていません。

于 2009-04-16T23:01:47.497 に答える
2

通貨コードが EUR の場合はどうなりますか? そして、それは打撃を受けましたが、米ドルはまだ世界中で使用されています. 通貨コードからロケールを推測するのは信頼できないようです。代わりに、ロケールの明示的なユーザー設定を導入できますか?

探している情報は組み込みの Java 通貨データベースの一部ではないため、そのための API はありません。明確な多くのケースに対して、独自のテーブルを作成できます。

于 2009-04-16T22:26:01.730 に答える
0

データベースが通貨値を保存している場合、同時に単位にぶら下がっている必要があります。今そうしているそうです。同時にロケールをデータベースに追加できますか? まともな解決策になる可能性があります。

于 2009-04-16T22:53:53.117 に答える