Java 比较BigDecimal是否大于零

Java 比较BigDecimal是否大于零,java,compare,bigdecimal,Java,Compare,Bigdecimal,如果BigDecimal值大于零,我如何比较?简单如下: if (value.compareTo(BigDecimal.ZERO) > 0) 实际上,指定它将返回-1、0或1,但更一般的compariable。compareTo方法仅保证在适当的三种情况下小于零、零或大于零,因此我通常只会坚持这种比较。使用类中内置的compareTo()函数。: signum返回-1、0或1,因为此BigDecimal的值为负、零或正。在BigDecimal对象上使用“.intValue()”检查其值是

如果
BigDecimal
值大于零,我如何比较?

简单如下:

if (value.compareTo(BigDecimal.ZERO) > 0)
实际上,指定它将返回-1、0或1,但更一般的
compariable。compareTo
方法仅保证在适当的三种情况下小于零、零或大于零,因此我通常只会坚持这种比较。

使用类中内置的
compareTo()
函数。

:


signum
返回-1、0或1,因为此BigDecimal的值为负、零或正。

在BigDecimal对象上使用“.intValue()”检查其值是否大于零时不正确。剩下的唯一选项是“.compareTo()”方法。

使用方法
compareTo()

 BigDecimal obj = new BigDecimal("100");
 if(obj.intValue()>0)
    System.out.println("yes");
控制台打印

    result ==> 1
compareTo()
返回

  • 1如果a大于b
  • -1如果b小于b
  • 0如果a等于b
现在,对于您的问题,您可以使用

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

我希望它对您有所帮助。

这同样有效:


value>BigDecimal.ZERO

BigDecimal.compareTo()以比较符号作为优化开始。因此,调用compareTo()可能是最好的选择,因为它更能揭示意图,而且只需要花费额外方法调用的代价(我怀疑无论如何都会内联)。这是公共API的一部分。所以,对我来说,这是一个更好的方法。其目的是确定符号是否为正(即>零)。如果查看反编译的
BigDecimal.compareTo()
方法,您会发现它调用了
signum()
两次。就性能而言,
signum()
更好。十进制的情况下,您有什么问题@jfajunior@İsmailYavuz我为不完整的评论感到抱歉!我至少应该写一份证据来证明这些论点,我的错。现在我在寻找发生了什么,因为我记得我必须把事情从“signum”改为“compareTo”,我不知道为什么。这可能是我的错误,因为我现在做了几次测试,我没有发现使用带小数的数字的“signum”有任何问题。需要额外警告一句。假设
value
的值为零,但刻度为非零(例如,它的计算结果为
0.00
,而不是
0
)。你可能想考虑它等于零。
compareTo()
方法确实可以做到这一点。但是
equals()
方法将不起作用。(如果需要的话,还有另一个证据,证明洛基或他的一个化身还活着,而且很好,已经进入了软件开发领域。)虽然我同意这是Java惯用的解决方案,但我认为它实际上不可读。每次我遇到这样的表达,我都会写一个测试来让自己确信我的表达方式是正确的。最近添加的类,如
LocalDate
include,可能表明Oracle也有同样的感受。这并不理想,但我认为在这种情况下编写实用工具<代码>比<代码>方法更具可读性。如果值为0.00或0,@Jon Skeet解决方案也有效吗。0@Angelina:我当然希望如此-这些值不大于0,因此我希望
compareTo
返回0。但是如果你担心的话,测试应该很容易。@MarkSlater我同意,比较就是Java应该在提高可读性上投入更多的时间,如果每个人都必须在每个项目中创建自己的可读方法,这是没有意义的。在C#中,您还可以为现有类创建扩展方法,以便直接使用`value.isGreaterThen(foo)`` obj包含numaric字符串,在接受的答案中未声明该值,这可能会造成混淆。我的答案会更清晰。对于任何价值,没有人会根据这些简单的事情的输入进行投票,这可能对复杂的场景有所帮助。您正在再次转换为intvalue。所以转换的代价是0.33,因为它将转换为int 0look,因为有一个方法isPositive(),也有类似is(bigdecimal.isZero();是(bigdecimal).notZero();is(bigdecimal).isPositive();//大于零是(bigdecimal).isNegative();//小于零的是(bigdecimal).isNonPositive();//小于或等于零是(bigdecimal).isNonNegative()@MortezaAdi因为
BigDecimal
实现了
compariable
比较函数,如
lt、le、eq、ne
最好移动到
compariableutils
。因此,它们可以用于任何其他类,如
Date
或自定义类型。@djmj需求定义了实现,不需要也无意构建可比较的util。除了lt、le、eq等的功能外,它们与通用的完全不同。
value
是一个BigDecimal,BigDecimal.ZERO也是一个BigDecimal。不能将大小数与>。
    result ==> 1
if (value.compareTo(BigDecimal.ZERO) > 0)
if (value.compareTo(new BigDecimal(0)) > 0)