在JAVA中读取列表时可以使用.contains(BigDecimal.ZERO)吗?
在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
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)
?