根据这个java.sun页面 ==是Java中浮点数的相等比较运算符.
但是,当我输入以下代码时:
if(sectionID == currentSectionID)
Run Code Online (Sandbox Code Playgroud)
进入我的编辑器并运行静态分析,我得到:"JAVA0078浮点值与==相比"
使用==比较浮点值有什么问题?这样做的正确方法是什么?
这不是关于如何比较两个BigDecimal对象的问题 - 我知道你可以使用compareTo而不是equals这样做,因为equals记录为:
与compareTo不同,此方法仅考虑两个BigDecimal对象的值和比例相等(因此通过此方法比较时2.0不等于2.00).
问题是:为什么equals以这种看似违反直觉的方式指定了?也就是说,为什么能够区分2.0和2.00 很重要?
似乎必须有这样的理由,因为Comparable指定compareTo方法的文档指出:
强烈建议(尽管不要求)自然排序与equals一致
我想必须有一个很好的理由忽略这个建议.
在JAVA中读取列表时,我们可以使用.contains(BigDecimal.ZERO)吗?
我在尝试:
if (selectPriceList.contains(BigDecimal.ZERO)) {
return true;
}
return false;
Run Code Online (Sandbox Code Playgroud)
但它总是返回错误.
这似乎有效,但需要纠正吗?
BigDecimal zeroDollarValue = new BigDecimal("0.0000");
if (selectPriceList.contains(zeroDollarValue)) {
return true;
}
return false;
Run Code Online (Sandbox Code Playgroud) 我在Android Java中有以下表达式:
myVar + " == 0 ? " + BigDecimal.ZERO.equals(myVar)
Run Code Online (Sandbox Code Playgroud)
输出以下内容:
0.0000 == 0 ? false
Run Code Online (Sandbox Code Playgroud)
在哪里myVar声明:
public BigDecimal myVar;
Run Code Online (Sandbox Code Playgroud)
并且Gson从服务的JSON数据中成功分配(我检查了这个以验证JSON是否良好).
为什么0.0000作为一个BigDecimal不相等BigDecimal.ZERO?