大十进制equals()
方法也比较规模,所以
new BigDecimal("0.2").equals(new BigDecimal("0.20")) // false
It's 有争议的为什么它会这样。
现在,假设我有一个Set<BigDecimal>
, 如何检查 0.2 是否在该集合中,与比例无关?
Set<BigDecimal> set = new HashSet<>();
set.add(new BigDecimal("0.20"));
...
if (set.contains(new BigDecimal("0.2")) { // Returns false, but should return true
...
}
contains()
如果你切换你的,它将按照你想要的方式工作HashSet
to a TreeSet.
它与大多数集合不同,因为它将根据compareTo()
方法相对于equals()
and hashCode()
:
TreeSet 实例使用其执行所有元素比较compareTo
(or compare
) method
自从BigDecimal.compareTo()不考虑规模进行比较,这正是您想要的。
或者您可以确保中的所有元素Set
具有相同的、最小的规模,总是使用stripTrailingZeros (both on add()
and on contains()
):
set.add(new BigDecimal("0.20").stripTrailingZeros());
...
if (set.contains(new BigDecimal("0.2").stripTrailingZeros()) {
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)