java – 如何检查BigDecimal是否在一个集合或映射中以一个比例尺独立的方式?

前端之家收集整理的这篇文章主要介绍了java – 如何检查BigDecimal是否在一个集合或映射中以一个比例尺独立的方式?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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 (or compare) method

而且自从BigDecimal.compareTo()比较而不考虑规模,这正是你想要的.

或者,您可以确保集合中的所有元素都相同,最小化,始终使用stripTrailingZeros(add()和on()都包含):

set.add(new BigDecimal("0.20").stripTrailingZeros());
...
if (set.contains(new BigDecimal("0.2").stripTrailingZeros()) {
  ...
}
原文链接:https://www.f2er.com/java/122796.html

猜你在找的Java相关文章