作用:
用来进行精确计算
为什么使用BigDecimal:
在代码里输入:System.out.println(10/3); 会得到结果3.3333333333333335
因为传入10进制的数字,在运算时会转为一个接近二进制的数运算,然后再返回,所以会造成数据丢失
构造方法:
方法名 | 说明 |
---|---|
BigDecimal(double val) | 参数为double |
BigDecimal(String val) | 参数为String |
常用方法:
方法名 | 说明 |
---|---|
public BigDecimal add(另一个BigDecimal对象) | 加法 |
public BigDecimal subtract (另一个BigDecimal对象) | 减法 |
public BigDecimal multiply (另一个BigDecimal对象) | 乘法 |
public BigDecimal divide (另一个BigDecimal对象) | 除法 |
public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式) | 除法 |
代码演示:
public static void main(String[] args) {
// public BigDecimal add(另一个BigDecimal对象) 加法
BigDecimal bd1 = new BigDecimal(0.1);
BigDecimal bd2 = new BigDecimal(0.2);
System.out.println(bd1.add(bd2)); // 0.3000000000000000166533453693773481063544750213623046875
// 如果要进行精确计算,要用字符串形式
BigDecimal bd3 = new BigDecimal("10");
BigDecimal bd4 = new BigDecimal("3.1");
System.out.println(bd3.add(bd4)); // 13.1
// public BigDecimal subtract (另一个BigDecimal对象) 减法
System.out.println(bd3.subtract(bd4));
// public BigDecimal multiply (另一个BigDecimal对象) 乘法
System.out.println(bd3.multiply(bd4));
// public BigDecimal divide (另一个BigDecimal对象) 除法
System.out.println(bd3.divide(bd4)); // 运行报错
// BigDecimal是精确运算,如果算到除不尽的就要用下面的三个参数的除法
/* BigDecimal divide = bd1.divide(参与运算的对象,小数点后精确到多少位,舍入模式);
参数1 ,表示参与运算的BigDecimal 对象。
参数2 ,表示小数点后面精确到多少位
参数3 ,舍入模式
BigDecimal.ROUND_UP 进一法
BigDecimal.ROUND_FLOOR 去尾法
BigDecimal.ROUND_HALF_UP 四舍五入
*/
BigDecimal divide = bd3.divide(bd4, 2, BigDecimal.ROUND_UP);
BigDecimal divide2 = bd3.divide(bd4, 2, BigDecimal.ROUND_FLOOR);
BigDecimal divide3 = bd3.divide(bd4, 2, BigDecimal.ROUND_HALF_UP);
System.out.println(divide); // 3.34
System.out.println(divide2);// 3.33
System.out.println(divide3);// 3.33
}
总结:
- BigDecimal是用来进行精确计算的
- 创建BigDecimal的对象,构造方法使用参数类型为字符串的。
- 四则运算(加减乘除)中的除法,如果除不尽请使用divide的三个参数的方法。