当前位置: 首页 > 知识库问答 >
问题:

如何以与比例无关的方式检查集合或地图中是否存在BigDecimal?

周高畅
2023-03-14

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

new BigDecimal("0.2").equals(new BigDecimal("0.20")) // false

它为什么会这样有争议。

现在,假设我有一个代码集

Set<BigDecimal> set = new HashSet<>();
set.add(new BigDecimal("0.20"));
...
if (set.contains(new BigDecimal("0.2")) { // Returns false, but should return true
    ...
}

共有3个答案

姬心思
2023-03-14

使用BigDecimal的compareTo方法。

BigDecimal("0.200").compareTo(new BigDecimal("0.2")) == 0; // Means they are equal.

来自JavaDoc

将此BigDecimal与指定的BigDecimal进行比较。此方法认为两个值相等但比例不同(如2.0和2.00)的BigDecimal对象相等。对于六个布尔比较运算符中的每一个,此方法优先于单独的方法(

裴承安
2023-03-14

HashSet#contains方法无法满足您的需求,它隐式地调用equals方法。您应该迭代Set并使用compareTo方法。如果找到值,则设置一个标志。

    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.
江棋
2023-03-14

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

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

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

由于BigDecimal.compareTo()不考虑规模进行比较,这正是您想要的。

或者,您可以通过始终使用striptrailingzero(在add()contains()上)来确保集中的所有元素具有相同的最小比例:

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

 类似资料:
  • 问题内容: 有没有一种方法可以检查nodestore的firestore中是否存在子集合? 目前,我正在使用文档,但是我需要检查文档中是否存在子类以便写入一些数据。 问题答案: 就在这里。您可以使用docs.length来知道子集合是否存在。 我制作了一个样本来指导您,希望对您有所帮助。

  • 本文向大家介绍JavaScript 检查集合中是否存在值,包括了JavaScript 检查集合中是否存在值的使用技巧和注意事项,需要的朋友参考一下 示例 要检查集合中是否存在给定值,请使用方法:.has() true如果someVal出现在集合中,将返回,false否则返回。

  • 问题内容: 如何在不使用try语句的情况下检查文件是否存在? 问题答案: 如果您要检查的原因是可以执行类似的操作if file_exists: open_it(),则try尝试使用a来打开它会更安全。检查然后打开可能会导致文件被删除或移动,或者介于检查和尝试打开文件之间。 如果您不打算立即打开文件,则可以使用 os.path.isfile True如果path是现有的常规文件,则返回。这遵循符号链

  • 问题内容: 我有以下问题: 我正在将Java驱动程序用于MongoDB 3。 在版本2中,可以执行DB.collectionExists(name)来检查所选数据库中是否存在一个集合。 在版本3中,从DB切换到MongoDatabase,此方法不再存在。 如何查找数据库中是否存在集合?我试图使用listCollectionNames()遍历集合,但这似乎效果很差。 谢谢你的帮助 问题答案: 你是对

  • 问题内容: 我需要使用猫鼬插入一些数据,但是集合的名称由用户在插入时提供,因此我首先必须检查集合是否存在。 我知道如何检查集合是否存在的方式是通过查询集合。我可以看到3种可行的方法。 找到一种使用猫鼬查询的方法(也许定义一个与数据库中的模式匹配的模式)。 从猫鼬获取一些底层的node-mongodb-native对象并手动执行查询。无论如何,这是我想学习的方法。 使用node-mongodb-na

  • 我遇到了一个场景,我需要检查特定的参与者是否存在,这可以通过ActorSystem完成。actorSelection方法,指定参与者路径 但是,当本地节点上存在此类参与者时,此方法可以正常工作。若actor系统由多个节点组成,并且actor存在于另一个节点上,则该方法告诉我们actor不存在。若我给出指定远程参与者系统的字符串,那个么这个方法可以工作。但在actorSelection方法中指定远程