进行BigDecimal比较的正确方法是什么



最近(我想是因为我把代码转换成了kotlin,但不确定(,Android Studio在我写时向我显示了一个警告

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

消息上写着";调用可替换的二进制运算符";并用替换我的代码

if (myValue > BigDecimal.ZERO)

我注意到我也使用

if (myValue.compareTo(BigDecimal.ZERO) == 0

但这次我没有得到任何警告,如果我试图更换它,就不起作用

if (myValue == BigDecimal.ZERO) // DOES NOT WORK

为什么> ZERO有效而== ZERO无效?为什么我在stackoverflow上看到的每个线程(例如这个(都建议使用compareTo,但> ZERO可以工作,并且是安卓工作室推荐的?

tl;dr:

  • val1 > val2->val1.compareTo(val2) > 0
  • val1 == val2->val1.equals(val2)
  • BigDecimal.equals(...)并没有按照您期望的方式工作

这是因为Kotlin用对.compareTo的调用替换了二进制运算符>>=<<=,因此val1 > val2val1.compareTo(val2) > 0完全相同。

然而,问题是val1 == val2被一个对.equals的调用所取代,并且BigDecimal.equals的行为与您认为的不一样。";正确的";检查是否相等的方法是您已经拥有的,即val1.compareTo(val2) == 0

你可以在这里阅读Kotlin撰稿人从2016年开始就这个问题进行的讨论。

相关内容

最新更新