2

BigDecimal のポイントの後に 3 つの値のみを保持する方法は?

解決策を見つけましたが、RoundingMode が必要です

    BigDecimal d = BigDecimal.valueOf(0.5649);
    System.out.println(d.remainder(BigDecimal.ONE));
    System.out.println(d.remainder(BigDecimal.ONE).divide(BigDecimal.valueOf(1), 3, RoundingMode.CEILING));

四捨五入せずに数値を正確に保ちたい。

4

3 に答える 3

4

setScale と RoundingMode.DOWN を使用するだけです

ゼロに向かって丸める丸めモード。破棄された端数の前の桁をインクリメントしません (つまり、切り捨てます)。

例えば

BigDecimal.valueOf(0.5649).setScale(3, RoundingMode.DOWN)
于 2012-04-30T13:37:34.377 に答える
0

BigDecimal は、このような制限付きで使用することを意図していません。小数点以下 3 桁だけが必要なのは奇妙な要件です。たぶん、ユーザーに小数点以下 3 桁だけを表示したいですか?

もしそうなら、私は使用することをお勧めします:java.text.DecimalFormat

小数点以下 3 桁よりも高い精度で計算を行わないようにしたい場合は、独自の表現/クラスを作成することをお勧めします。内部的には値をlong(または適切なクラス/プリミティブ) として保持しますが、実際の値の 1000 倍の値を保持します。すべての計算は内部表現で行われ、値を求められたら、内部値を 1000.0d で割り、変換double(または適切) して返します。

于 2012-04-30T13:42:32.740 に答える
0

私はこれに使用doubleします。

double d = 0.5649;
d = (long) (d * 1000) / 1000.0; // round down.
System.out.println(d);

版画

0.564

また

d = (long) (d * 1000 + 0.5) / 1000.0; // round half up.
于 2012-04-30T15:32:20.637 に答える