BigDecimal相关整理

  1. bigdecimal类型四则运算:

  BigDecimal s = new Bigdecimal(5);

  BigDecimal x = new Bigdecimal(15);

依次为最基础的加减乘除:

  s.add(x);

  s.substract(x);

  s.multiply(x);

  s.divide(x);

  1. Bigdecimal类型比较大小:

s1.compareTo(s2);
返回结果:整形,1是大于,0是等于,-1是小于

2018-07-30补充

  1. 今天遇到的问题:BigDedcimal精度丢失
public static void main(String [] args){

        BigDecimal s1 = new BigDecimal(0.12);
        BigDecimal s2 = new BigDecimal(0.24);
        BigDecimal s3 = new BigDecimal("0.12");
        BigDecimal s4 = new BigDecimal("0.24");

        System.out.println(s1.add(s2));
        System.out.println(s3.add(s4));
    }

结果如下:

0.35999999999999998667732370449812151491641998291015625
0.36

解决方法:
1.new BigDecimal(0.12+"")
2.new BigDecimal(BigDecimal.valueOf(0.12))
3.new BigDecimal("0.12")
三种方法本质相同,都是将其转换为String类型

public static BigDecimal valueOf(double val) {
        return new BigDecimal(Double.toString(val));
    }

原因:浮点数在系统中是以二进制表示的,在进行计算的时候会有误差的存在

···
0.1不能用二进制表示导致数据精度丢失:

0.1×2=0.2 .....................0

0.2×2=0.4 ......................0

0.4×2=0.8 .....................0

0.8×2=1.6.......................1

0.6×2=1.2.......................1

0.2×2=0.4.......................0

.....

是无限循环的
···

posted @ 2018-07-30 23:30  脑白金  阅读(184)  评论(0编辑  收藏  举报