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

BigDecimal 2.0等于BigDecimal 2.00[重复]

阎弘雅
2023-03-14

我读到BigDecimal.equals的Java博士说:

将此BigDecimal与指定的对象进行相等比较。与compareTo不同,此方法仅当两个BigDecimal对象的值和比例相等时才认为它们相等(因此,使用此方法进行比较时,2.0不等于2.00)。

但是当我测试它时,不知何故我得到了意想不到的结果,BigDecimal(2.0)等于BigDecimal(2.00)。我想,出于同样的原因,当我把BigDecimal(2.0)BigDecimal(2.00)放在HashSet中时,大小为1,而我预期大小为2。请看下面的代码,如果有人能指出我是否遗漏了什么?

import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class CollectionTest {
    
    public static void main(String[] args) {
        System.out.println(new BigDecimal(2.0).compareTo(new BigDecimal(2.00))); // 0
        System.out.println(new BigDecimal(2.0).equals(new BigDecimal(2.00))); // true   -- ** UNEXPECTED **
        
        HashSet<BigDecimal> hashset = new HashSet<>();
        Set<BigDecimal> treeset = new TreeSet<>();
        
        hashset.add(new BigDecimal(2.0));
        hashset.add(new BigDecimal(2.00));
        
        treeset.add(new BigDecimal(2.0));
        treeset.add(new BigDecimal(2.00));
        
        System.out.println("hashset.size(): " + hashset.size());    // 1    -- ** UNEXPECTED **
        System.out.println("treeset.size(): " + treeset.size());    // 1
    }
}

共有1个答案

丁兴德
2023-03-14

在编译时,doubles2.02.00是相同的。您需要一个字符串。喜欢

System.out.println(new BigDecimal(2.0).equals(new BigDecimal("2.00")));

输出

false

您当前的代码相当于

System.out.println(2 == 2.00);

这显然是正确的。

要扩展最后一个例子,请考虑

BigDecimal a = new BigDecimal(2.0);
BigDecimal b = a.setScale(2);
System.out.printf("%s equals %s is %s%n", a, b, a.equals(b));

这应该解释为什么您当前的代码会有这样的行为;因为

2 equals 2.00 is false
 类似资料:
  • } ========================================================================================== 我希望HashSet调用equal方法,因为重写了hashCode。在equals compare之后,我想删除我要传递到hashSet的集合中的重复项。 在控制台中,它将我打印出来,为true(因为在equals

  • 当使用and这两个都创建不同的String对象吗?我知道如果我使用它使用s1的相同对象,但在s2的情况下也使用相同的对象吗?如果是这样,那么为什么使用不同的对象。因为如果我做它返回false; 我对等于方法的理解是,它比较两个引用是否引用同一个对象,除非我们重写了等于方法,如果我的理解是错的,请告诉我。

  • 这是我的代码: 我知道表示引用,表示包含。 现在为什么<code>a。等于(b)为假? 它们中的每一个都具有相同的值。

  • 我12哟,我学习Java,我想做如果语句时,它是超过1和小于或等于4,或只是2和4之间,但它不工作。我试过了 <代码>如果(4 它显示了这个错误

  • 我有下面的火药结构。因此,我需要根据查询 到目前为止,我已经写了这个,它只适用于一个值。我如何将两者结合起来

  • tl;医生:这是什么意思= 我刚刚解决了一个关于代码战的问题,在看了其他人对这个问题的共同反应后,我一直看到: