BigDecimal相关整理
- bigdecimal类型四则运算:
BigDecimal s = new Bigdecimal(5);
BigDecimal x = new Bigdecimal(15);
依次为最基础的加减乘除:
s.add(x);
s.substract(x);
s.multiply(x);
s.divide(x);
- Bigdecimal类型比较大小:
s1.compareTo(s2);
返回结果:整形,1是大于,0是等于,-1是小于
2018-07-30补充
- 今天遇到的问题: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
.....
是无限循环的
···
Just Do Yourself!