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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (43)

我需要以下结果

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);

使用round()有一点涉及,因为它要求您指定要保留的位数。在你的例子中,这将是3,但这不适用于所有值:

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

(请注意,BigDecimal对象是不可改变的,既setScaleround,会返回一个新的对象)

用户回答回答于

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

扫码关注云+社区