web-dev-qa-db-ja.com

通貨コードから通貨記号へのマッピング

こんにちは。データベースには、販売記録用の家のテーブルがあります。各家のレコードには、通貨コード(ISO 4217形式)フィールドがあります。おそらくそのコードから通貨記号を取得して、プレゼンテーション側で使用できるようにするのでしょうか?

ありがとうございました。

追伸Currencyオブジェクト(Currency.getInstance(currencyCode)によって作成された)をDecimalNumberFormat setCurrencyメソッドに設定し、表示する必要がある値をフォーマットする問題を解決しようとしていましたが、フォーマットされた値はまだ通貨記号なしです。

15
artjomka

Currencyオブジェクトの getSymbol メソッドを使用できます。

使用される記号は、使用されるロケールによって異なります this および this。 を参照してください

更新、2016年1月:リンクは現在停止しています。しかし、それらはJava 1.4/5に固有であったため、もはや関連性はありません。通貨のフォーマットの詳細については、 https://docs.Oracle.com/javase/tutorial /i18n/format/numberFormat.html 。ただし、リンクはWayBackEngineにあります。

9
Nivas

@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());
14
Kevin D

CurrencyクラスとDecimalFormatクラスを使用して、要件を達成できます。次の例では、#は数値を表し、¤は通貨記号を表します。関連するフォーマットパラメータは、JavaのAPIドキュメント DecimalFormat クラスにあります。

        Currency currency = Currency.getInstance("USD");

        DecimalFormat decimalFormat = new DecimalFormat("#¤");
        decimalFormat.setCurrency(currency);
        System.out.println(decimalFormat.format(234));
3
Manjula

Currency.getSymbol(Locale)ではなくCurrency.getSymbol()を呼び出す必要があります(ロケールオブジェクトなし)。デフォルトのロケールを設定すると、希望する動作が得られます。

1
Delfino

通貨記号を盲目的に追加しないでください(appendはロケールに応じた通貨記号の位置であると想定しています)。 I18n-安全でない慣行。 "#¤"文字列と同じ(接頭辞の通貨記号のあるロケールの場合、これは正しくありません)

0
Delfino

https://stackoverflow.com/a/15343675/702345 にコードスニペットがあります

ただし、注意してください。

  • 1つの通貨に複数の記号を含めることができます。例:USDにはローカル "es_US"の記号 "US $"もあります(少なくとも私のVMのJava8、Win7では)
  • 差額通貨には同じ記号を使用できます(例:USD、AUD)。
0
brabenetz