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

新手上路,请多包涵

我需要以下结果

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

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

原文由 n a 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 662
2 个回答

您可以使用 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 都将返回一个新对象。)

原文由 Grodriguez 发布,翻译遵循 CC BY-SA 2.5 许可协议

如果我按照 Grodriguez 的回答去做

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

这暂时解决了我的问题.. :) 谢谢大家。

原文由 n a 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题