您现在的位置: 365建站网 > 365学习 > BigDecimal类型比较大小及加减乘除

BigDecimal类型比较大小及加减乘除

文章来源:365jz.com     点击数:418    更新时间:2017-11-27 12:39   参与评论
这个类是java里精确计算的类

1、比较对象是否相等,一般的对象用equals,但是BigDecimal比较特殊,举个例子

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


在现实中这两个数字是相等的,但是问题来来了a.equals(b)结果是false;怎么不相等了呢?

解决办法:


  if(a.compareTo(b)==0)//结果是true
  public int compareTo(BigDecimal val)
  //结果是:-1 小于,0 等于,1 大于

if(a.compareTo(b) == -1){
a
}

if(a.compareTo(b)==0){
a=b;
}

if(a.compareTo(b)==1){
a>b;
}

public static MathContext mc = new MathContext();

public static BigDecimal add(BigDecimal a1,BigDecimal a2){

   a1=null2Zero(a1);

   a2=null2Zero(a2);

   return a1.add(a2,mc);

}

public static BigDecimal null2Zero(BigDecimal arg){

    return arg==null ? BigDecimal.ZERO : arg ;

}



BigDecimal的加减乘除及比较大小

import java.math.BigDecimal;
import static java.lang.System.out;
public class BaseClass {
    public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal("100"); 
        BigDecimal num2 = new BigDecimal("50"); 
       
        //加法
        BigDecimal result1 = num1.add(num2);
        out.println("和    是   :  " + result1);
       
        //减法
        BigDecimal result2 = num1.subtract(num2);
        out.println("差    是   :  " + result2);
       
        //乘法
        BigDecimal result3 = num1.multiply(num2);
        out.println("积    是   :  " + result3);
       
        //除法
        BigDecimal result4 = num1.divide(num2);
        out.println("商    是   :  " + result4);
       
        //比较
        BigDecimal num = new BigDecimal("100");     //用做比较的值 
        out.println(num1.compareTo(num2));            //大于 时,返回 1
        out.println(num.compareTo(num1));            //等于 时,返回 0 
        out.println(num2.compareTo(num1));            //小于 时,返回 -1
       
        out.println(num1.min(num2));                //求两个数的最小值,返回小的数
        out.println(num1.max(num2));                //求两个数的最大值,返回大的数
       
//        compareTo方法比较时,不同于equals方法,需要两边都不为null,否则会报空指针异常,
//        源码如下
//        public int compareTo(BigDecimal val) {
//            // Quick path for equal scale and non-inflated case.
//            if (scale == val.scale) {
//                long xs = intCompact;
//                long ys = val.intCompact;
//                if (xs != INFLATED && ys != INFLATED)
//                    return xs != ys ? ((xs > ys) ? 1 : -1) : 0;
//            }
//            int xsign = this.signum();
//            int ysign = val.signum();
//            if (xsign != ysign)
//                return (xsign > ysign) ? 1 : -1;
//            if (xsign == 0)
//                return 0;
//            int cmp = compareMagnitude(val);
//            return (xsign > 0) ? cmp : -cmp;
//        }

//        max/min方法源代码如下
//        public BigDecimal max(BigDecimal val) {
//            return (compareTo(val) >= 0 ? this : val);
//        }
//        public BigDecimal min(BigDecimal val) {
//            return (compareTo(val) <= 0 ? this : val);
//        }
    }
}

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛


发表评论 (418人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片
最新评论
------分隔线----------------------------