DOUBLE精度问题,BigDecimal

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DOUBLE精度问题,BigDecimal相关的知识,希望对你有一定的参考价值。

  BigDecimal bignum1 = new BigDecimal("10");
        BigDecimal bignum2 = new BigDecimal("5");
        BigDecimal bignum3 = null;
        
        //加法
        bignum3 =  bignum1.add(bignum2);     
        System.out.println("和 是:" + bignum3);
        
        //减法
        bignum3 = bignum1.subtract(bignum2);
        System.out.println("差  是:" + bignum3);
        
        //乘法
        bignum3 = bignum1.multiply(bignum2);
        System.out.println("积  是:" + bignum3);
        
        //除法
        bignum3 = bignum1.divide(bignum2);

 

 

比较大小

BigDecimal比较大小
   这个类是java里精确计算的类,下面说一下两个BigDecimal对象大小,相等的判断
   1 比较对象是否相等
     一般的对象用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

    简单翻译:
           结果是
-1 小于  
0 等于
1 大于

 

异常

用两个BigDecimal类型的数字做除法运算时,出现了一个如下的异常信息:

1 java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result

  上网查了一下这个异常的,找到了原因所在:通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. 
  解决的办法就是给divide方法设置精确的小数点,如:divide(xxxxx,2)。

技术分享



































以上是关于DOUBLE精度问题,BigDecimal的主要内容,如果未能解决你的问题,请参考以下文章

DOUBLE精度问题,BigDecimal

Double与BigDecimal 精度问题

精度更高的double类型计算工具类(借助BigDecimal类型)

BigDecimal类处理高精度计算

java里面double 做乘法和加法会丢失精度嘛?

金融项目java开发_BigDecimal(解决计算精度问题)