首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查BigDecimal是在集合中,还是地图是以独立于比例的方式进行的?

如何检查BigDecimal是在集合中,还是地图是以独立于比例的方式进行的?
EN

Stack Overflow用户
提问于 2013-11-20 09:16:52
回答 3查看 2.6K关注 0票数 10

BigDecimal的equals()方法也比较标度,所以

代码语言:javascript
复制
new BigDecimal("0.2").equals(new BigDecimal("0.20")) // false

这是有争议为什么它的行为像这样。

现在,假设我有一个Set<BigDecimal>,如何检查0.2是否独立于该集合?

代码语言:javascript
复制
Set<BigDecimal> set = new HashSet<>();
set.add(new BigDecimal("0.20"));
...
if (set.contains(new BigDecimal("0.2")) { // Returns false, but should return true
    ...
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-20 09:30:51

如果您将contains()切换到TreeSet,它将按您的意愿工作。

它不同于大多数集合,因为它将根据compareTo()方法决定相等,而不是equals()hashCode()

TreeSet实例使用其compareTo (或compare)方法执行所有元素比较

因为BigDecimal.compareTo()不考虑规模,所以这正是你想要的。

Alternatively --您可以确保Set中的所有元素都是相同的、最小规模的,方法是始终使用stripTrailingZeros (在add()上和在contains()上):

代码语言:javascript
复制
set.add(new BigDecimal("0.20").stripTrailingZeros());
...
if (set.contains(new BigDecimal("0.2").stripTrailingZeros()) {
  ...
}
票数 17
EN

Stack Overflow用户

发布于 2013-11-20 09:17:57

HashSet#contains方法不能满足您的需求,它隐式地调用equals方法。您应该在Set上迭代并使用compareTo方法。如果找到值而不是设置标志。

代码语言:javascript
复制
    Set<BigDecimal> set = new HashSet<>();
    set.add(new BigDecimal("0.20"));
    boolean found=false;
    for (BigDecimal bigDecimal : set) {
        if(bigDecimal.compareTo(new BigDecimal("0.2"))==0){
            System.out.println("Value is contain");
            found=true;
            break;
        }
    }
    if(found)// Use this flag for codition.
票数 0
EN

Stack Overflow用户

发布于 2013-11-20 09:24:38

使用compareTo方法的BigDecimal。

代码语言:javascript
复制
BigDecimal("0.200").compareTo(new BigDecimal("0.2")) == 0; // Means they are equal.

来自JavaDoc

将此BigDecimal与指定的BigDecimal进行比较。该方法认为值相等但具有不同规模(如2.0和2.00)的两个BigDecimal对象是相等的。对于六个布尔比较运算符(<,==,>,>=,!=,<=)中的每一个,该方法都优先于单独的方法。用于执行这些比较的建议成语是:(x.compareTo(y) <op> 0),其中<op>是六个比较运算符之一。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20091723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档