BigDecimal的equals()方法也比较比例,所以
new BigDecimal("0.2").equals(new BigDecimal("0.20")) // false
Run Code Online (Sandbox Code Playgroud)
有人质疑它为何如此行事.
现在,假设我有一个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
...
}
Run Code Online (Sandbox Code Playgroud)
Joa*_*uer 17
contains()如果您切换HashSet到a,TreeSet将按照您的意愿工作.
距离,因为这将决定基于平等最套不同的compareTo()方法,而不是equals()和hashCode():
TreeSet实例使用其
compareTo(或compare)方法执行所有元素比较
而且由于BigDecimal.compareTo()比较而不考虑比例,这正是你想要的.
或者,你可以确保在所有的元素Set都是相同的,最小的规模,通过始终使用stripTrailingZeros(既上add()和上contains()):
set.add(new BigDecimal("0.20").stripTrailingZeros());
...
if (set.contains(new BigDecimal("0.2").stripTrailingZeros()) {
...
}
Run Code Online (Sandbox Code Playgroud)