Java BigDecimal:舍入到最接近的整数值

2022-08-31 10:08:01

我需要以下结果

100.12 -> 100.00
100.44 -> 100.00
100.50 -> 101.00
100.75 -> 101.00

.round()或?我该怎么做?.setScale()


答案 1

您可以使用 将小数位数减少到零。假设包含要舍入的值:setScale()value

BigDecimal scaled = value.setScale(0, RoundingMode.HALF_UP);
System.out.println(value + " -> " + scaled);

使用有点复杂,因为它要求您指定要保留的位数。在您的示例中,这将是 3,但这并非对所有值都有效:round()

BigDecimal rounded = value.round(new MathContext(3, RoundingMode.HALF_UP));
System.out.println(value + " -> " + rounded);

(请注意,对象是不可变的;两者都将返回一个新对象。BigDecimalsetScaleround


答案 2

如果我按照格罗德里盖兹的答案去

System.out.println("" + value);
value = value.setScale(0, BigDecimal.ROUND_HALF_UP);
System.out.println("" + value);

这是输出

100.23 -> 100
100.77 -> 101

这不是我想要的,所以我最终做了这个。

System.out.println("" + value);
value = value.setScale(0, BigDecimal.ROUND_HALF_UP);
value = value.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("" + value);

这就是我得到的

100.23 -> 100.00
100.77 -> 101.00

这解决了我现在的问题..:)谢谢大家。