BigDecimal的equals()方法也比较规模,所以
new BigDecimal("0.2").equals(new BigDecimal("0.20")) // false
这是contested为什么它的行为.
现在,假设我有一个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 ... }
解决方法
如果您将HashSet切换到
a
TreeSet
,则contains()将按照要求运行.
它与大多数集合不同,因为它将基于compareTo()方法而不是equals()和hashCode()来确定等式:
a TreeSet instance performs all element comparisons using its
compareTo
(orcompare
) method
而且自从BigDecimal.compareTo()
比较而不考虑规模,这正是你想要的.
或者,您可以确保集合中的所有元素都相同,最小化,始终使用stripTrailingZeros
(add()和on()都包含):
set.add(new BigDecimal("0.20").stripTrailingZeros()); ... if (set.contains(new BigDecimal("0.2").stripTrailingZeros()) { ... }