web-dev-qa-db-ja.com

BigDecimalを使用して常に2つの小数点を持つ数値を表示する方法は?

BigDecimalを使用して、価格の値を取得しています。要件は次のようなものです。データベースから取得する値が何であれ、表示される値には小数点が2つ必要です。

例えば:

取得された値は1-1.00として表示されます
フェッチされた値は1.7823です。1.78として表示されます。

私はsetScale(2, BigDecimal.ROUND_HALF_UP)を使用していますが、それでもいくつかの場所で、DBからのデータが整数の場合、同じものが表示されています!!

DBの値が0の場合、0としてのみ表示されます。それを0.00として表示したい

ありがとう

27
user1391730

BigDecimalは不変であり、setScale(2、BigDecimal.ROUND_HALF_UP)を含むその操作は新しいBigDecimalを生成します。正しいコードは

        BigDecimal bd = new BigDecimal(1);
//      bd.setScale(2, BigDecimal.ROUND_HALF_UP);   bd.setScale does not change bd
        bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
        System.out.println(bd);

出力

1.00
44

切り上げ形式を使用できます

BigDecimal bd = new BigDecimal(2.22222);
System.out.println(bd.setScale(2,BigDecimal.ROUND_UP));

これがお役に立てば幸いです。

11
corgrin

Javaで数値をフォーマットするには、次を使用できます。

 System.out.printf("%1$.2f", d);

dは変数または数値です

または

 DecimalFormat f = new DecimalFormat("##.00");  // this will helps you to always keeps in two decimal places
 System.out.println(f.format(d)); 
5

適切なロケールでNumberFormatのようなものを format に使用する必要があります

NumberFormat.getCurrencyInstance().format(bigDecimal);
2
kosa

BigDecimal.setScaleは機能します。

1
lwpro2