在JAVA中读取列表时可以使用.contains(BigDecimal.ZERO)吗?

在JAVA中读取列表时可以使用.contains(BigDecimal.ZERO)吗?,java,contains,bigdecimal,Java,Contains,Bigdecimal,在JAVA中读取列表时,我们可以使用.contains(BigDecimal.ZERO)吗 我正在努力: if (selectPriceList.contains(BigDecimal.ZERO)) { return true; } return false; 但它总是返回false 这似乎有效,但是否需要纠正 BigDecimal zeroDollarValue = new BigDecimal("0.0000"); if (selec

在JAVA中读取列表时,我们可以使用.contains(BigDecimal.ZERO)吗

我正在努力:

    if (selectPriceList.contains(BigDecimal.ZERO)) {
        return true;
    }
    return false;
但它总是返回false

这似乎有效,但是否需要纠正

    BigDecimal zeroDollarValue = new BigDecimal("0.0000");
    if (selectPriceList.contains(zeroDollarValue)) {
        return true;
    }
    return false;

出现此问题的原因是
BigDecimal.ZERO的
scale
(小数点右侧的位数)设置为0,而
zerodallarvalue
scale
设置为4

BigDecimal
的equals方法比较刻度和值-如果两者不同,则返回false

你可以用

return selectPriceList.contains(BigDecimal.ZERO.setScale(4));
假设你们所有的价格都精确到小数点后四位。如果没有,您可能必须使用

for(BigDecimal bd : selectPriceList) {
    if(bd.compareTo(BigDecimal.ZERO) == 0) {
        return true;
    }
}
return false;

有关更多信息,请参阅。

有关记录,您可以执行一个简单的
返回selectPriceList.contains(zeroDollarValue)
,或者,
返回selectPriceList.contains(新的BigDecimal(“0.0000”);
。那么……您的列表是否包含
BigDecimal.ZERO
?换句话说,
BigDecimal.ZERO
不等于
新的BigDecimal(“0.0000”)
。这是
BigDecimal
的一个已知陷阱。如果(bd.compareTo>),这不应该是
(BigDecimal.ZERO)==0)