欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

BigDecimal如何比较大小

程序员文章站 2022-05-28 18:52:41
...

        BigDecimal是Java里精确计算的类,下面说一下两个BigDecimal对象大小,相等的判断。

        一般的对象用equals,但是BigDecimal比较特殊,举个例子:

BigDecimal a=BigDecimal.valueOf(1.0);
BigDecimal b=BigDecimal.valueOf(1.000);

        在现实中这两个数字是相等的,但是如果用a.equals(b)结果是false;怎么不相等了呢?因为equals是比较内容,“1.0”和“1.000”当然不一样了。

        解决办法:if(a.compareTo(b)==0) 结果是true。

实例一:

package com.bijian.test;

import java.math.BigDecimal;

public class Test {

    public static void main(String[] args) {
        
        BigDecimal a = new BigDecimal("10.00");
        BigDecimal b = new BigDecimal("10");
        BigDecimal c = new BigDecimal(10.00);
        
        //equals方式
        System.out.println(a.equals(b)); //false
        System.out.println(a.equals(c)); //false
        
        //toPlainString再equals
        System.out.println(a.toPlainString().equals(b.toPlainString())); //false
        System.out.println(a.toPlainString().equals(c.toPlainString())); //false
        
        //longValue方式
        System.out.println(a.longValue() == b.longValue()); //true
        System.out.println(a.longValue() == c.longValue()); //true
        
        //compareTo
        System.out.println(a.compareTo(b) == 0); //true
        System.out.println(a.compareTo(c) == 0); //true
    }
}

        从实例一来看,好像longValue方式也可以,让我们继续看实例二。

实例二:

package com.bijian.test;

import java.math.BigDecimal;

public class Test02 {

    public static void main(String[] args) {
        
        BigDecimal d = new BigDecimal("10.100001");
        BigDecimal e = new BigDecimal(10.100001);
        
        System.out.println(e.equals(d)); //false
        System.out.println(e.toPlainString().equals(d.toPlainString())); //false
        System.out.println(e.longValue() == d.longValue()); //true
        System.out.println(e.compareTo(d) == 0); //false
    }
}

  为什么compareTo方法不可以了,而longValue方式却还是OK的。让我们Debug一下。

 BigDecimal如何比较大小
            
    
    博客分类: java基础 BigDecimaljava 
BigDecimal如何比较大小
            
    
    博客分类: java基础 BigDecimaljava 
BigDecimal如何比较大小
            
    
    博客分类: java基础 BigDecimaljava 
        Debug我们发现,BigDecimal d = new BigDecimal("10.100001");和BigDecimal e = new BigDecimal(10.100001);出来的两个对象,实际上确实是不一样的,而longValue()后都变成了10。

  • BigDecimal如何比较大小
            
    
    博客分类: java基础 BigDecimaljava 
  • 大小: 25.5 KB
  • BigDecimal如何比较大小
            
    
    博客分类: java基础 BigDecimaljava 
  • 大小: 40.5 KB
  • BigDecimal如何比较大小
            
    
    博客分类: java基础 BigDecimaljava 
  • 大小: 23.4 KB
相关标签: BigDecimal java