android - BigDecimal比较的正确方法是什么

标签 android android-studio kotlin bigdecimal android-lint

从最近开始(我认为是因为我将代码转换为 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 上看到的每个线程(例如 this )都使用 compareTo 推荐但是 > ZERO工作并被 Android Studio 推荐?

最佳答案

tl;博士:

  • 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 年开始对此问题的讨论 over here .

    关于android - BigDecimal比较的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63339605/

    相关文章:

    android - 是否可以将可滚动的 TextView 添加到 ListView?

    java - Android Studio Gradle 同步 : "Unable to load class..."

    Android Studio 在 Windows 中调用调用者的快捷方式

    android-studio - 迁移到新 Places SDK 客户端

    java - 如何知道 Canvas 上的哪个位图被触摸?

    java - 为什么使用 SQLite 的 Constants 接口(interface)来保存字段名称?

    android - 如何将 editText 值传递给 viewModel 和 Livedata (Kotlin)

    android - ANDAND 条件应为 'if true then false'

    kotlin - 为什么 KFunction2 不是 Kotlin 中的可表示类型?

    android水平 ScrollView