40

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

例えば:

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

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

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

ありがとう

4

6 に答える 6

62

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

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

出力

1.00

注 - Java 9BigDecimal.ROUND_HALF_UPは廃止されたため、現在は を使用する必要がありますRoundingMode.ROUND_HALF_UP

于 2013-01-25T05:11:30.557 に答える
14

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

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

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

于 2013-01-25T05:20:24.543 に答える
8

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)); 
于 2013-01-25T05:25:04.613 に答える
2

フォーマットNumberFormatするには、適切なロケールのようなものを使用する必要があります

NumberFormat.getCurrencyInstance().format(bigDecimal);
于 2013-01-25T05:05:35.897 に答える