フォーマットされたBigDecimal値を印刷する方法は?


104

私が持っているBigDecimalフィールドamountお金を表し、そして私のような形式で、ブラウザでその値を印刷する必要があります$123.00$15.50$0.33

どうやってやるの?

(私は自分自身を得ている参照のみのシンプルなソリューションfloatValueからBigDecimal、その後使用してNumberFormat小数部のための2桁の精度を作るために)。

回答:


134
public static String currencyFormat(BigDecimal n) {
    return NumberFormat.getCurrencyInstance().format(n);
}

JVMの現在のデフォルトLocaleを使用して通貨記号を選択します。または、Locale

NumberFormat.getInstance(Locale.US)

詳しくは、NumberFormatクラスをご覧ください。


DecimalFormatと同じようにパターンを指定することはできますか?
Philippe Gioseffi

70

桁区切り記号を設定123,456.78するには、DecimalFormatを使用する必要があるとします。

     DecimalFormat df = new DecimalFormat("#,###.00");
     System.out.println(df.format(new BigDecimal(123456.75)));
     System.out.println(df.format(new BigDecimal(123456.00)));
     System.out.println(df.format(new BigDecimal(123456123456.78)));

結果は次のとおりです。

123,456.75
123,456.00
123,456,123,456.78

#,###.00マスクを設定しましたが、長い値も正常にフォーマットされます。結果のコンマ(、)セパレーターはロケールに依存することに注意してください。ロシア語のロケールでは、単に空白()の場合があります。


19
ゼロを(.00ではなく)0.00として表示したい場合は、"#,##0.00"代わりにパターンを使用してください。
Jonik、2016年

35

与えられた状況に意味のある別の方法は

BigDecimal newBD = oldBD.setScale(2);

私がこれを言うのは、場合によっては、小数点以下2桁を超える金額になると意味がない場合があるためです。これをさらに一歩進めると、これは

String displayString = oldBD.setScale(2).toPlainString();

しかし、私は単にsetScaleメソッドを強調表示したかっただけです(これは、最後の小数点以下の処理方法を制御するために2番目の丸めモード引数を取ることもできます。状況によっては、Javaがこの丸めメソッドを指定するように強制します)。


14
 BigDecimal pi = new BigDecimal(3.14);
 BigDecimal pi4 = new BigDecimal(12.56);

 System.out.printf("%.2f",pi);

// 3.14を出力します

System.out.printf("%.0f",pi4);

// 13を出力します


6

@Jeff_Alieffsonの回答に似ていますが、デフォルトに依存していませんLocale

DecimalFormatSymbols明示的なロケールに使用:

DecimalFormatSymbols decimalFormatSymbols  = DecimalFormatSymbols.getInstance(new Locale("ru", "RU"));

または明示的な区切り記号:

DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(' ');

次に:

new DecimalFormat("#,##0.00", decimalFormatSymbols).format(new BigDecimal("12345"));

結果:

12 345.00

1
BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN)

1
(2、BigDecimal.ROUND_HALF_UP).toString()のBigDecimal(19.001).setScaleする必要があります
ジェフTsay
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.