BigDecimal
1. 简介
-
作用:
可以用来进行精确计算
-
构造方法:
方法名 说明 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对象,精确几位,舍入模式) 除法 总结
- BigDecimal是用来进行精确计算的
- 【重要!!!】创建BigDecimal的对象,构造方法使用参数类型为字符串的。
- 四则运算中的除法,如果除不尽请使用divide的三个参数的方法,指定尾数的取舍规则
2. 精确计算时使用字符串构造
// BigDecimal bd1 = new BigDecimal(0.1);
// BigDecimal bd2 = new BigDecimal(0.2);
//如果想要进行精确运算,那么请使用字符串的构造
BigDecimal bd1 = new BigDecimal("0.1");
BigDecimal bd2 = new BigDecimal("0.2");
// public BigDecimal add(另一个BigDecimal对象) 加法
BigDecimal add = bd1.add(bd2);
System.out.println("和为" + add);
// public BigDecimal subtract (另一个BigDecimal对象) 减法
BigDecimal subtract = bd1.subtract(bd2);
System.out.println("差为" + subtract);
// public BigDecimal multiply (另一个BigDecimal对象) 乘法
BigDecimal multiply = bd1.multiply(bd2);
System.out.println("积为" + multiply);
// public BigDecimal divide (另一个BigDecimal对象) 除法
BigDecimal divide = bd1.divide(bd2);
System.out.println("商为"+divide);
3. 除不尽时的处理方式
BigDecimal divide = bd1.divide(参与运算的对象,小数点后精确到多少位,舍入模式);
//参数一:表示参数运算的另一个对象
//参数二:表示小数点后精确到多少位
//参数三:舍入模式
//进一法 BigDecimal.ROUND_UP 理解为向上舍入
//去尾法 BigDecimal.ROUND_FLOOR 理解为向下舍入
//四舍五入 BigDecimal.ROUND_HALF_UP
BigDecimal bd01 = new BigDecimal("1.0");
BigDecimal bd02 = new BigDecimal("3.0");
// 没有精准结果 会报错 ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
//BigDecimal result = bd01.divide(bd02);
//0.33333
BigDecimal result1 = bd01.divide(bd02, 3, BigDecimal.ROUND_UP);
System.out.println(result1);
BigDecimal result2 = bd01.divide(bd02, 3,BigDecimal.ROUND_FLOOR);
System.out.println(result2);
BigDecimal result3 = bd01.divide(bd02, 3,BigDecimal.ROUND_HALF_UP);
System.out.println(result3);
BigDecimal d05 = new BigDecimal("10");
BigDecimal d06 = new BigDecimal("7");
System.out.println(d05.divide(d06, 2, BigDecimal.ROUND_UP)); //1.4285 1.43
System.out.println(d05.divide(d06, 2, BigDecimal.ROUND_FLOOR)); //1.42
System.out.println(d05.divide(d06, 2, BigDecimal.ROUND_HALF_UP)); //1.43
Comments NOTHING