RoundingMode.DOWN 是 Java 中 BigDecimal 的“向零舍入”模式,正数向下截断、负数向上截断(如 3.9→3,-3.9→-3),调用 setScale(newScale, RoundingMode.DOWN) 实现截断,需显式指定且注意精度限制。

RoundingMode.DOWN 在 Java 的 BigDecimal 中就是实现“直接截断”(也叫“向零舍入”)的舍入模式,它不会四舍五入,也不会进位,而是简单地丢弃多余的小数位,效果等同于“砍掉后面的部分”。
什么是 RoundingMode.DOWN?
它表示朝零方向舍入:正数向下截断(如 3.9 → 3),负数也向上截断(即绝对值变小,如 -3.9 → -3)。注意:不是“向下取整”,而是“向零取整”,所以对负数来说其实是“向上”靠近零。
怎么用它实现截断?
调用 setScale(int newScale, RoundingMode.DOWN) 即可。关键点:
- newScale 是你想要保留的小数位数(可以是 0,表示截断到整数)
- 必须显式指定
RoundingMode.DOWN,不能依赖默认模式(默认是 HALF_UP) - 原数值的精度不影响结果,只要 scale 设置正确,就会按位截断
常见用法示例
比如要把 12.34567 截断为两位小数:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
BigDecimal bd = new BigDecimal("12.34567");BigDecimal result = bd.setScale(2, RoundingMode.DOWN); // 结果是 12.34
再比如处理负数:
BigDecimal bd = new BigDecimal("-5.999");BigDecimal result = bd.setScale(0, RoundingMode.DOWN); // 结果是 -5(不是 -6)
注意事项
使用时需确保目标 scale 不超过当前精度,否则会抛 ArithmeticException(除非原数本身能精确表示该 scale)。如果不确定原始精度,建议先用 stripTrailingZeros() 清理,或统一用 new BigDecimal(String) 构造避免浮点误差。

















