2010-11-12 80 views

回答

282

很简单:

if (value.compareTo(BigDecimal.ZERO) > 0) 

documentation for compareTo实际上指定它将返回-1,0或1,但更普遍的Comparable<T>.compareTo方法只能保证小于零,零,或大于零适当的三种情况 - 所以我通常只是坚持这种比较。

+43

警告的附加字被调用。假设'value'的值为零,但是不为零(例如,它的结果为“0.00”而不是“0”)。你可能想要考虑它等于零。 'compareTo()'方法确实可以做到这一点。 **但是'equals()'方法不会。**(另一个证明,如果需要的话,Loki或他的一个头像还活着,并且已经进入软件开发。) – 2011-12-06 11:16:34

+4

虽然我同意这是在Java中的惯用解决方案,我不认为它实际上是可读的。每当我遇到这样的表达时,我发现自己正在写一个测试来让自己放心,我已经找到了正确的方法。也许最近添加的类,如'LocalDate'包含['isBefore'](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#isAfter-java.time .chrono.ChronoLocalDate-)表明Oracle对此感觉相同。这并不理想,但我认为在这些情况下编写一个实用程序“isGreaterThan”方法的可读性略高一些。 – 2016-11-14 11:27:51

10

使用compareTo()功能,这是内置到类中。

123

Possible better way

if (value.signum() > 0) 
+9

BigDecimal.compareTo()通过比较signums作为优化开始。所以最好调用compareTo(),因为它更有意图 - 揭示并且只花费额外方法调用的代价(我怀疑它会被内联)。 – 2011-12-06 10:54:44

+22

这是公共API的一部分。所以对我而言,这是一种更好的方式。意图是确定该符号是否为正(即> 0) – Marc 2012-01-24 13:56:37

+10

+ 1Best的答案比这篇文章中的所有内容。 – Jabir 2013-04-03 08:05:44

-1

为什么就不能这么简单

if(bigDecimalObject.intValue() > 0) 
+0

如果你的bigDecimalObject持有字符串“abc”的数据,该怎么办? – 2018-02-16 11:59:24

+0

理想情况下,尽管它不是一个语法问题,但我们并没有做新的BigDecimal(“abc”)。它会在执行期间抛出java.lang.NumberFormatException。如果分配了sting,则该对象本身不能正确使用。比较之前,我们从来没有看到BigDecimal是否是字符串。此外,该问题不打算检查null,检查不是字符串或检查其他一些事情:-) – Jajikanth 2018-02-22 22:48:22

-1
BigDecimal obj = new BigDecimal("100"); 
if(obj.intValue()>0) 
    System.out.println("yes"); 
+0

为什么这个答案比已经接受的答案更好? – martijnn2008 2018-02-16 12:25:14

+0

该obj拥有numaric字符串,在接受的答案中,该值未被声明,可能会造成混淆。我的答案会更清晰。 – 2018-02-19 11:43:14