You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对BigDecimal数值的小数点前指定位数执行商业四舍五入

最优简洁实现

直接链式调用两次setScale即可,无需中间转字符串再构造对象:

var b = a.setScale(-2, RoundingMode.HALF_UP).setScale(2);

逻辑说明

  • 第一次setScale(-2, RoundingMode.HALF_UP):完成商业四舍五入到百位(小数点前两位)的逻辑,以你给出的示例a = new BigDecimal("1234.56")为例,这一步会得到值为1200、精度为0的BigDecimal对象
  • 第二次setScale(2):直接将上一步得到的整数值补充两位小数的后缀零,调整小数位为2位,不需要额外舍入规则,不会抛出算术异常,最终得到值为1200.00、精度为2的BigDecimal对象,完全满足new BigDecimal("1200.00").equals(b)的判断条件

原写法的问题

你原来的实现中转字符串再构造new BigDecimal(xxx.toPlainString())属于完全冗余的操作,不仅增加代码复杂度,还会带来不必要的性能损耗,直接链式调用setScale就可以达到完全相同的效果。

内容的提问来源于stack exchange,提问作者peer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:27:04