121

お金を表すBigDecimalフィールドamountがあり、ブラウザにその値を , , のような形式で出力する必要が$123.00あり$15.50ます$0.33

どうやってやるの?

(私が自分で考えている唯一の簡単な解決策は、小数部の 2 桁の精度を得るfloatValueためにBigDecimal使用することです)。NumberFormat

4

7 に答える 7

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

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

NumberFormat.getInstance(Locale.US)

詳細については、NumberFormatクラスを参照してください。

于 2010-08-03T11:01:28.077 に答える
42

与えられた状況で意味のある別の方法は次のとおりです。

BigDecimal newBD = oldBD.setScale(2);

私がこれを言うのは、お金に関しては、小数点以下2桁を超えることは意味をなさない場合があるからです. これをさらに一歩進めると、これは次のことにつながる可能性があります

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

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

于 2011-12-20T21:02:19.713 に答える
10

@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
于 2019-05-06T11:54:46.880 に答える
1
BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN)
于 2016-06-26T06:51:11.197 に答える