如何在 Java 中检查 BigDecimal 变量是否 == 0?

新手上路,请多包涵

我在 Java 中有以下代码;

 BigDecimal price; // assigned elsewhere

if (price.compareTo(new BigDecimal("0.00")) == 0) {
    return true;
}

编写 if 条件的最佳方法是什么?

原文由 JoJo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

使用 compareTo(BigDecimal.ZERO) 而不是 equals()

 if (price.compareTo(BigDecimal.ZERO) == 0) // see below

BigDecimal 常量 BigDecimal.ZERO 相比,避免每次执行都必须构建 new BigDecimal(0)

仅供参考, BigDecimal 也有常数 BigDecimal.ONEBigDecimal.TEN 为了您的方便。


笔记!

您不能使用 BigDecimal#equals() 的原因是它考虑了 _规模_:

 new BigDecimal("0").equals(BigDecimal.ZERO) // true
new BigDecimal("0.00").equals(BigDecimal.ZERO) // false!

所以它不适合纯数字比较。但是, BigDecimal.compareTo() 比较时不考虑比例:

 new BigDecimal("0").compareTo(BigDecimal.ZERO) == 0 // true
new BigDecimal("0.00").compareTo(BigDecimal.ZERO) == 0 // true

原文由 Bohemian 发布,翻译遵循 CC BY-SA 3.0 许可协议

或者,可以使用 signum()

 if (price.signum() == 0) {
    return true;
}

原文由 kman 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题