首页 > 解决方案 > Null Safe 比较具有 0.0 和 0 的两个 bigdecimal 对象

问题描述

最初的代码是:

            if(!Objects.equals(src.getApplicationItemCost(), dest.getApplicationItemCost())){
               log.info("Difference")
            }

输出:

      getApplicationItemCost: src:0.0| dest:0
      Difference

ApplicationItemCost 的类型为 BigDecimal。

如果我使用compareTo,那么我必须明确检查空值,例如:

LOG.info("getApplicationItemCost: src:" + src.getApplicationItemCost() + "| dest:" + dest.getApplicationItemCost());
        if((src.getApplicationItemCost()==null && dest.getApplicationItemCost()!=null)
                || (src.getApplicationItemCost()!=null && dest.getApplicationItemCost()==null)
                || !Objects.equals(src.getApplicationItemCost(), dest.getApplicationItemCost())
                || src.getApplicationItemCost().compareTo(dest.getApplicationItemCost())!=0 )

比较 0.0 和 0 的任何建议。为什么会有这种差异?(可能是数据库有数字字段,当转换为大十进制时它不显示 0.0?)

标签: javajava-8bigdecimal

解决方案


建立一个比较器:

Comparator<BigDecimal> c = Comparator.nullsFirst(Comparator.naturalOrder());

(或者nullsLast,如果您只与零进行比较也没关系)。

然后:

if (c.compare(first, second) != 0) {
  // ...
}

推荐阅读