Bigdecimal中compareTo与equals区别
遇到的问题场景:
一个金额字段判断是否为0,即 金额是否等于BigDecimal.ZERO
使用equals运行该demo:
public static void main(String[] args) {
BigDecimal decimal = new BigDecimal("0E-10");
BigDecimal zero = BigDecimal.ZERO;
if (decimal.equals(zero)){
System.out.println("相等");
}else {
System.out.println("不等");
}
}
结果:
其问题所在:
equals比较时,一般比较的时对象的内容本身,对于bigdecimal来说,必须考虑数据的精度,虽然都为0,但是0不等于0.00,所以使用该方法时一定要考虑这个问题
使用compareTo运行该demo:
public static void main(String[] args) {
BigDecimal decimal = new BigDecimal("0E-10");
BigDecimal zero = BigDecimal.ZERO;
if (decimal.compareTo(zero) == 0){
System.out.println("相等");
}else {
System.out.println("不等");
}
}
结果:
而compareTo方法只考虑最终结果,是什么数就是什么结果,0.00或者0.0都视为0
结论:
大多数情况下还是建议使用compareTo来比较,当遇到两个数的精度也必须相同的场景时可以考虑使用该方法。
记录一下,希望有用