BigDecimal的概述
由于在运算的时候,float类型和double很容易丢失精度,所以为了能精确表示,计算浮点数,Java提供了BigDecimal
2.0-1.1 = 0.899999
在计算机中使用二进制方式存储 , 二进制表示小数的时候不能直接表示出来 , 只能是无限接近于这个小数
同理 用十进制也有不能精确表示的 如 1/3 只能写成0.3333循环 无限接近于这个数 就会出现精度损失
用BigDecimal 就可以很精确的计算
构造方法
- public BigDecimal (String val) //
- public BigDecimal (double val)// 不推荐 用这种构造 因为还是不够精确
成员方法
- public BigDecimal add(BigDecimal val)
- public BigDecimal subtract (BigDecimal val)
- public BigDecimal multiply (BigDecimal val)
- public BigDecimal divide (BigDecimal val)
BigDecimal bd1 = new Bigdecimal("2.0");
BigDecimal bd2 = new Bigdecimal("1.1");
System.out.println(bd1.subtract(bd2));
通过构造中传入字符串的方式生成的BigDecimal 对象 再算2.0 - 1.1 结果就对了 开发时推荐
小技能
Bigdecimal bd1 = Bigdecimal.valueOf(2.0);
Bigdecimal bd1 = Bigdecimal.valueOf(1.1);
System.out.println(bd1.subtract(bd2));
// 结果也是0.9 所以这种方式也可以 不推荐使用构造直接传入double数