gpt4 book ai didi

java - 如何以独立于比例的方式检查 BigDecimal 是否在 Set 或 Map 中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:52:03 24 4
gpt4 key购买 nike

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
...
}

最佳答案

contains()如果您切换 HashSet 将按照您的意愿工作至 a TreeSet .

它与大多数集合不同,因为它将根据 compareTo() 来决定是否相等。与 equals() 相反的方法和 hashCode() :

a TreeSet instance performs all element comparisons using its compareTo (or compare) method

BigDecimal.compareTo() 在不考虑比例的情况下进行比较,这正是您在这里想要的。

或者您可以确保 Set 中的所有元素通过始终使用 stripTrailingZeros 具有相同的最小规模(同时add()contains() 上):

set.add(new BigDecimal("0.20").stripTrailingZeros());
...
if (set.contains(new BigDecimal("0.2").stripTrailingZeros()) {
...
}

关于java - 如何以独立于比例的方式检查 BigDecimal 是否在 Set 或 Map 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20091723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com