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 回答