bigdecimal.roundingmode.up是“远离零舍入”,即只要舍弃部分不为零,正数向上取整、负数向下取整;如2.3→3、-2.3→-3,整除时不变;适用于需保守上界的场景。

BigDecimal.RoundingMode.UP 的行为就是“远离零舍入”,也就是向绝对值更大的方向取整,不考虑正负号的影响。
UP 模式的舍入逻辑
UP 模式不管数字是正还是负,只要需要舍弃的部分不为零,就朝远离零的方向进位:
- 正数:有余数就向上取整(比如 1.1 → 2,1.9 → 2)
- 负数:有余数就向下取整(比如 -1.1 → -2,-1.9 → -2)
- 刚好整除时不变(比如 2.0 → 2,-3.0 → -3)
实际用法示例
调用 setScale 或 divide 方法时传入 UP:
BigDecimal a = new BigDecimal("2.3");
BigDecimal b = new BigDecimal("-2.3");
System.out.println(a.setScale(0, RoundingMode.UP)); // 输出: 3
System.out.println(b.setScale(0, RoundingMode.UP)); // 输出: -3
BigDecimal c = new BigDecimal("5");
BigDecimal d = new BigDecimal("3");
System.out.println(c.divide(d, 2, RoundingMode.UP)); // 5/3 ≈ 1.666... → 1.67
注意和 HALF_UP 的区别
很多人误以为 HALF_UP 是“四舍五入”,其实 UP 完全不同:
- HALF_UP 看舍弃部分是否 ≥ 0.5 再决定是否进位(如 1.5 → 2,-1.5 → -2)
- UP 只要舍弃部分 ≠ 0 就进位(如 1.1 → 2,-1.1 → -2,-1.0001 → -2)
适用场景
UP 常用于需要“保守上界”的业务场景,例如:
- 计算最小包装数量(不能少装,宁可多装)
- 费用分摊时确保总额不低估(如按人头均摊后向上取整)
- 资源预估(内存、库存、配额),必须满足最低需求
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











