web-dev-qa-db-ja.com

Java String.formatと通貨記号

数値のフォーマットに使用される次の形式のいくつかの既存のコードがあります:

String.format( pattern, value )

I コード自体は変更できません-コードに提供されているフォーマットパターンのみを変更できることに注意してください。

デフォルトロケールの通貨記号を出力するためのフォーマットパターンは何ですか?基本的に、私は次の出力を達成したいと思います。

String.format( "...", 123 )  => $ 123
14
Marc Polizzi

あなたが与えた制約で、私はそれを達成することは不可能だと思います。現在のロケールの通貨記号を取得するには、最小限のコードが必要です。

プログラムにコードを追加する手段がまったくない場合は、「 currency "(¤)]に確立された記号を使用するのが最適です。これはまさにこの目的のために設立されたもので、より具体的な記号がない通貨を象徴しています。

指定されたコードを変更できないが、プロジェクト全体にコードを追加する場合は、それを使用して、最もよく使用されるシンボルを見つけることができます。取得したら、それを使用して、フォーマットに使用する既存のコードのパターンを作成できます。

元のプログラムが次に実行されるロケールを見つけることができれば、その設定を使用して構成を埋めるアシスタントプログラムを作成できます。

4
Urs Reupke

車輪の再発明をする必要はありません。 DecimalFormat 通貨サポートが付属しています:

String output = DecimalFormat.getCurrencyInstance().format(123.45);

これには、オプションで Locale を渡すことにより、完全なロケールサポートも付属しています。

String output = DecimalFormat.getCurrencyInstance(Locale.GERMANY).format( 123.45);

これがテストです:

System.out.println(DecimalFormat.getCurrencyInstance().format( 123.45) );
System.out.println(DecimalFormat.getCurrencyInstance(Locale.GERMANY).format( 123.45)) ;

出力:

$123.45
123,45 €
12
Bohemian

次のことを試すことができます。

public static void main(String[] args) {
    System.out.println(String.format(" %d \u20AC", 123)); // %d for integer
    System.out.println(String.format(" %.2f \u20AC", 123.10)); // %f for floats
}

これは印刷します:

123 €
123.10 €
5
Paul Vargas

使用可能なデフォルトのロケールがない場合は、Unicodeおよび10進形式を使用して通貨記号を設定できます。以下のコードのように:

例:インドの通貨記号を設定し、値をフォーマットします。これは、ユーザーが設定を変更しなくても機能します。

Locale locale = new Locale("en","IN");
DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat.getCurrencyInstance(locale);
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(locale);
dfs.setCurrencySymbol("\u20B9");
decimalFormat.setDecimalFormatSymbols(dfs);
System.out.println(decimalFormat.format(12324.13));

出力:

₹12,324.13
1