加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何检查BigDecimal是否在一个集合或映射中以一个比例尺

发布时间:2020-12-14 05:22:59 所属栏目:Java 来源:网络整理
导读:BigDecimal的equals()方法也比较规模,所以 new BigDecimal("0.2").equals(new BigDecimal("0.20")) // false 这是contested为什么它的行为. 现在,假设我有一个Set BigDecimal如何检查该集合中的0.2是否是独立的? SetBigDecimal set = new HashSet();set.add
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()) {
  ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读