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

JoJ*_*oJo 4 java contains bigdecimal

在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)

Mic*_*ael 9

出现此问题的原因是scale,小数点右边的位数BigDecimal.ZERO设置为0,而scaleof zeroDollarValue为4.

equals方法BigDecimal比较scale和value - 如果两者不同,则返回false.

你可以使用

return selectPriceList.contains(BigDecimal.ZERO.setScale(4));
Run Code Online (Sandbox Code Playgroud)

假设您的所有价格都是小数点后四位.如果没有,您可能必须使用

for(BigDecimal bd : selectPriceList) {
    if(bd.compareTo(BigDecimal.ZERO) == 0) {
        return true;
    }
}
return false;
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅文档.