こんにちは。データベースには、販売記録用の家のテーブルがあります。各家のレコードには、通貨コード(ISO 4217形式)フィールドがあります。おそらくそのコードから通貨記号を取得して、プレゼンテーション側で使用できるようにするのでしょうか?
ありがとうございました。
追伸Currencyオブジェクト(Currency.getInstance(currencyCode)によって作成された)をDecimalNumberFormat setCurrencyメソッドに設定し、表示する必要がある値をフォーマットする問題を解決しようとしていましたが、フォーマットされた値はまだ通貨記号なしです。
Currency
オブジェクトの getSymbol メソッドを使用できます。
使用される記号は、使用されるロケールによって異なります this および this。 を参照してください
更新、2016年1月:リンクは現在停止しています。しかし、それらはJava 1.4/5に固有であったため、もはや関連性はありません。通貨のフォーマットの詳細については、 https://docs.Oracle.com/javase/tutorial /i18n/format/numberFormat.html 。ただし、リンクはWayBackEngineにあります。
@artjomka
デフォルトのロケールをラトビアに設定することで問題を再現できました
Locale.setDefault(new Locale("lv","LV"));
Currency c = Currency.getInstance("EUR");
System.out.println(c.getSymbol());
これにより、「EUR」の出力が得られました。
ただし、ロケールを英国(既にデフォルト)に設定したままにすると、ユーロ(€)の記号が表示されます。
Locale.setDefault(Locale.UK);
Currency c = Currency.getInstance("EUR");
System.out.println(c.getSymbol());
CurrencyクラスとDecimalFormatクラスを使用して、要件を達成できます。次の例では、#は数値を表し、¤は通貨記号を表します。関連するフォーマットパラメータは、JavaのAPIドキュメント DecimalFormat クラスにあります。
Currency currency = Currency.getInstance("USD");
DecimalFormat decimalFormat = new DecimalFormat("#¤");
decimalFormat.setCurrency(currency);
System.out.println(decimalFormat.format(234));
Currency.getSymbol(Locale)
ではなくCurrency.getSymbol()
を呼び出す必要があります(ロケールオブジェクトなし)。デフォルトのロケールを設定すると、希望する動作が得られます。
通貨記号を盲目的に追加しないでください(appendはロケールに応じた通貨記号の位置であると想定しています)。 I18n-安全でない慣行。 "#¤"文字列と同じ(接頭辞の通貨記号のあるロケールの場合、これは正しくありません)
https://stackoverflow.com/a/15343675/702345 にコードスニペットがあります
ただし、注意してください。