Java 中的 BigDecimal 是处理高精度十进制数的首选类,常用于金融计算等对精度敏感的场景。
很多开发者容易误用 == 或 > < 来比较对象,这会导致逻辑错误。正确的做法是使用 compareTo 方法。它返回一个整数:0 表示相等,负数表示当前值较小,正数表示较大。
关于精度控制,setScale 是关键。它需要两个参数:目标小数位数和舍入模式。常见的模式有 HALF_UP(四舍五入)、CEILING(向上取整)、FLOOR(向下取整)等。不同的舍入策略直接影响最终业务结果,特别是在金融场景下必须谨慎选择。
下面通过代码演示具体的比较逻辑和舍入效果。
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalDemo {
public static void main(String[] args) {
// 比较示例
BigDecimal num1 = new BigDecimal("10.5");
BigDecimal num2 = new BigDecimal("20.75");
int result = num1.compareTo(num2);
if (result < 0) {
System.out.println("num1 小于 num2");
} else if (result > 0) {
System.out.println("num1 大于 num2");
} else {
System.out.println("num1 等于 num2");
}
// 舍入示例
BigDecimal val = new BigDecimal();
val.setScale();
val.setScale(, RoundingMode.CEILING);
val.setScale(, RoundingMode.FLOOR);
val.setScale(, RoundingMode.HALF_UP);
val.setScale(, RoundingMode.DOWN);
}
}

