数値のフォーマットに使用される次の形式のいくつかの既存のコードがあります:
String.format( pattern, value )
I コード自体は変更できません-コードに提供されているフォーマットパターンのみを変更できることに注意してください。
デフォルトロケールの通貨記号を出力するためのフォーマットパターンは何ですか?基本的に、私は次の出力を達成したいと思います。
String.format( "...", 123 ) => $ 123
あなたが与えた制約で、私はそれを達成することは不可能だと思います。現在のロケールの通貨記号を取得するには、最小限のコードが必要です。
プログラムにコードを追加する手段がまったくない場合は、「 currency "(¤)]に確立された記号を使用するのが最適です。これはまさにこの目的のために設立されたもので、より具体的な記号がない通貨を象徴しています。
指定されたコードを変更できないが、プロジェクト全体にコードを追加する場合は、それを使用して、最もよく使用されるシンボルを見つけることができます。取得したら、それを使用して、フォーマットに使用する既存のコードのパターンを作成できます。
元のプログラムが次に実行されるロケールを見つけることができれば、その設定を使用して構成を埋めるアシスタントプログラムを作成できます。
車輪の再発明をする必要はありません。 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 €
次のことを試すことができます。
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 €
使用可能なデフォルトのロケールがない場合は、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