如何比较 BigDecimal
值是否大于零?
这很简单:
if (value.compareTo(BigDecimal.ZERO) > 0)
compareTo 方法的文档说明它将返回 -1、0 或 1,但更通用的 Comparable<T>.compareTo
方法只保证三种情况中的小于零、等于零或大于零 - 所以我通常只使用这种比较方式。
compareTo()
方法确实会这样做。 但是,equals()
方法不会这样做。(如果需要进一步证明的话,可以证明Loki或他的某个化身依然活着并已进入软件开发。) - Andrew SpencerLocalDate
)包括isBefore
方法是Oracle公司觉得同样存在这个问题的原因。尽管这不是理想的解决方案,但在这些情况下编写一个实用的isGreaterThan
方法可能更加易读。 - Mark SlatercompareTo
返回0。但是如果你感到担忧,那么测试应该对你来说很容易。 - Jon Skeet.signum()
。 - fpsBigDecimal.compareTo()
方法,你会发现它调用了两次 signum()
。因此,就性能而言,signum()
更好。 - MeIr使用compareTo()
方法更安全。
BigDecimal a = new BigDecimal(10);
BigDecimal b = BigDecimal.ZERO;
System.out.println(" result ==> " + a.compareTo(b));
控制台打印
result ==> 1
compareTo()
返回
- 1 如果 a 大于 b
- -1 如果 a 小于 b
- 0 如果 a 等于 b
现在你可以使用这个方法解决你的问题。
if (value.compareTo(BigDecimal.ZERO) > 0)
或者if (value.compareTo(new BigDecimal(0)) > 0)
我希望它对你有所帮助。
使用内置在该类中的 compareTo()
函数。
也许,
BigDecimal a = new BigDecimal(10);
if(a.abs().equals(a)){
// positive
}else {
// negative
}
当然,上述内容不包括零的情况。
value > BigDecimal.ZERO
value
是一个 _BigDecimal_,而且 BigDecimal.ZERO
也是。你不能使用 > 来比较 BigDecimals。 - Jan B. for (int i = 0; i < this.listTypes.size(); i++) {
if (this.listTypes.get(i).isAutorise()
&& this.listTypes.get(i).getPlafond() != null
&& this.listTypes.get(i).getPlafond().compareTo(BigDecimal.ZERO) > 0) {
this.listTypes.get(i).setProcuration(this.entity);
this.listTypes.get(i).setActeur(this.entity.getMandataire());
this.acteurTypeOperationService.addOne(this.listTypes.get(i));
}
}
BigDecimal obj = new BigDecimal("100");
if(obj.intValue()>0)
System.out.println("yes");
BigDecimal("0.01")
呢?它会打印“yes”吗? - epox
BigDecimal
实现了Comparable
,比较函数例如lt、le、eq、ne
最好移至ComparableUtils
。这样,它们就可以用于任何其他类,如Date
或自定义类型。 - djmj