10.0 などの金額に相関する値が DB に格納されています。Currency/CurrencyCode にもアクセスできます。ロケールがわからない場合、NumberFormat/DecimalFormat/(other?) を使用してフォーマットするにはどうすればよいですか? ドキュメントによると、外国通貨では機能しないデフォルトのロケールが選択されます。
4 に答える
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);
一般的に言えば、正しい動作は、通貨の典型的なロケールではなく、ユーザーの優先ロケールで金額をフォーマットすることです。クライアント側では、ユーザーの設定 (Locale.getDefault()) があります。Web サーバー側で何かを行っている場合は、Accept-Language を使用するか、できればページ コンテンツのロケールを使用して、適切なロケールを取得します。
理由は次のとおりです。英語の米国ユーザーは 10,000,000.15 ユーロを理解しますが、ドイツに相当する 10.000.000.15 ユーロは理解できません。
とにかく、通貨自体には、適切なロケールを推測するのに十分な情報が含まれていません。
通貨コードが EUR の場合はどうなりますか? そして、それは打撃を受けましたが、米ドルはまだ世界中で使用されています. 通貨コードからロケールを推測するのは信頼できないようです。代わりに、ロケールの明示的なユーザー設定を導入できますか?
探している情報は組み込みの Java 通貨データベースの一部ではないため、そのための API はありません。明確な多くのケースに対して、独自のテーブルを作成できます。
データベースが通貨値を保存している場合、同時に単位にぶら下がっている必要があります。今そうしているそうです。同時にロケールをデータベースに追加できますか? まともな解決策になる可能性があります。