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
...
}
使用BigDecimal的compareTo方法。
BigDecimal("0.200").compareTo(new BigDecimal("0.2")) == 0; // Means they are equal.
来自JavaDoc
将此BigDecimal与指定的BigDecimal进行比较。此方法认为两个值相等但比例不同(如2.0和2.00)的BigDecimal对象相等。对于六个布尔比较运算符中的每一个,此方法优先于单独的方法(
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.
如果将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方法中指定远程