java - 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?)
解决方案
建立一个比较器:
Comparator<BigDecimal> c = Comparator.nullsFirst(Comparator.naturalOrder());
(或者nullsLast
,如果您只与零进行比较也没关系)。
然后:
if (c.compare(first, second) != 0) {
// ...
}
推荐阅读
- sql - 在 MS-ACCESS 的 1 个概览中显示来自不同查询的结果
- c - 覆盖变量实际上是如何工作的?
- node.js - 在 through 子句 Sequelize 中包含模型
- if-statement - 如何使用 IF 条件设置公式?
- r - 如何在该函数的装饰器中访问函数的参数?
- angular - 使用管理员帐户登录时,isAdmin 从 Firebase 实时数据库中消失
- php - php warning when trying to set a bit in a string/chr
- c++ - 程序在 Visual Studio 调试器中运行。可执行文件无法正常运行
- java - 如何在java中捕获两个非法异常
- python - 以新格式填充新的 Pandas DataFrame - 查找