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()
我需要以下结果
100.12 -> 100.00
100.44 -> 100.00
100.50 -> 101.00
100.75 -> 101.00
.round()
或?我该怎么做?.setScale()
您可以使用 将小数位数减少到零。假设包含要舍入的值: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);
(请注意,对象是不可变的;两者都将返回一个新对象。BigDecimal
setScale
round
如果我按照格罗德里盖兹的答案去
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
这解决了我现在的问题..:)谢谢大家。