回答:
public static String currencyFormat(BigDecimal n) {
return NumberFormat.getCurrencyInstance().format(n);
}
JVMの現在のデフォルトLocale
を使用して通貨記号を選択します。または、Locale
。
NumberFormat.getInstance(Locale.US)
詳しくは、NumberFormat
クラスをご覧ください。
桁区切り記号を設定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
マスクを設定しましたが、長い値も正常にフォーマットされます。結果のコンマ(、)セパレーターはロケールに依存することに注意してください。ロシア語のロケールでは、単に空白()の場合があります。
"#,##0.00"
代わりにパターンを使用してください。
与えられた状況に意味のある別の方法は
BigDecimal newBD = oldBD.setScale(2);
私がこれを言うのは、場合によっては、小数点以下2桁を超える金額になると意味がない場合があるためです。これをさらに一歩進めると、これは
String displayString = oldBD.setScale(2).toPlainString();
しかし、私は単にsetScaleメソッドを強調表示したかっただけです(これは、最後の小数点以下の処理方法を制御するために2番目の丸めモード引数を取ることもできます。状況によっては、Javaがこの丸めメソッドを指定するように強制します)。
@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