お金を表すBigDecimal
フィールドamount
があり、$123.00
、$15.50
、$0.33
などの形式でその値をブラウザに印刷する必要があります。
どうやってやるの?
(私が見る唯一の簡単な解決策は、floatValue
からBigDecimal
を取得し、NumberFormat
を使用して小数部の精度を2桁にすることです)。
public static String currencyFormat(BigDecimal n) {
return NumberFormat.getCurrencyInstance().format(n);
}
JVMの現在のデフォルト Locale
を使用して通貨記号を選択します。または、Locale
を指定できます。
NumberFormat.getInstance(Locale.US)
詳細については、「 NumberFormat
class」を参照してください。
桁区切り記号を設定するには、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
マスクを設定しましたが、長い値も正常にフォーマットします。結果のカンマ(、)区切り文字はロケールに依存することに注意してください。ロシア語ロケールの場合は、単なるspace()の場合があります。
特定の状況で意味をなす別の方法は、
BigDecimal newBD = oldBD.setScale(2);
場合によって小数点以下2桁を超えるお金については意味がないので、私はこれを言うだけです。これをさらに一歩進めると、これは
String displayString = oldBD.setScale(2).toPlainString();
しかし、私は単にsetScaleメソッドを強調したいだけです(最後の小数点の処理方法を制御するために2番目の丸めモード引数を取ることもできます。状況によっては、Javaがこの丸め方法を指定するよう強制します)。
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を印刷します
@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)