お金を表すBigDecimal
フィールドamount
があり、ブラウザにその値を , , のような形式で出力する必要が$123.00
あり$15.50
ます$0.33
。
どうやってやるの?
(私が自分で考えている唯一の簡単な解決策は、小数部の 2 桁の精度を得るfloatValue
ためにBigDecimal
使用することです)。NumberFormat
お金を表すBigDecimal
フィールドamount
があり、ブラウザにその値を , , のような形式で出力する必要が$123.00
あり$15.50
ます$0.33
。
どうやってやるの?
(私が自分で考えている唯一の簡単な解決策は、小数部の 2 桁の精度を得るfloatValue
ためにBigDecimal
使用することです)。NumberFormat
public static String currencyFormat(BigDecimal n) {
return NumberFormat.getCurrencyInstance().format(n);
}
JVM の現在のデフォルトを使用Locale
して通貨記号を選択します。または、 を指定できますLocale
。
NumberFormat.getInstance(Locale.US)
詳細については、NumberFormat
クラスを参照してください。
与えられた状況で意味のある別の方法は次のとおりです。
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
BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN)