我有以下代码在Java;
BigDecimal price; // assigned elsewhere
if (price.compareTo(new BigDecimal("0.00")) == 0) {
return true;
}
写if条件的最好方法是什么?
我有以下代码在Java;
BigDecimal price; // assigned elsewhere
if (price.compareTo(new BigDecimal("0.00")) == 0) {
return true;
}
写if条件的最好方法是什么?
当前回答
有一个常数,你可以检查:
someBigDecimal.compareTo(BigDecimal.ZERO) == 0
其他回答
你会想要使用equals(),因为它们是对象,并利用内置的ZERO实例:
if (selectPrice.equals(BigDecimal.ZERO))
请注意,.equals()将比例考虑在内,因此除非selectPrice与. zero的比例(0)相同,否则将返回false。
将比例从等式中剔除:
if (selectPrice.compareTo(BigDecimal.ZERO) == 0)
我应该指出,对于某些数学情况,0.00 != 0,这就是为什么我认为.equals()考虑了刻度。0.00表示百分位的精度,而0则不是那么精确。根据具体情况,您可能希望坚持使用.equals()。
我通常使用以下方法:
if (selectPrice.compareTo(BigDecimal.ZERO) == 0) { ... }
另外,我认为值得一提的是,BigDecimal类中的equals和compareTo方法的行为彼此不一致。
这基本上意味着:
BigDecimal someValue = new BigDecimal("0.00");
System.out.println(someValue.compareTo(BigDecimal.ZERO) == 0); // true
System.out.println(someValue.equals(BigDecimal.ZERO)); // false
因此,您必须非常小心someValue变量中的比例,否则您将得到意想不到的结果。
BigDecimal.ZERO.setScale(2).equals(new BigDecimal("0.00"));
只是想在这里分享一些有用的kotlin扩展
fun BigDecimal.isZero() = compareTo(BigDecimal.ZERO) == 0
fun BigDecimal.isOne() = compareTo(BigDecimal.ONE) == 0
fun BigDecimal.isTen() = compareTo(BigDecimal.TEN) == 0