BigDecimal

发布于 2022-01-05  112 次阅读


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对象,精确几位,舍入模式) 除法

    总结

    1. BigDecimal是用来进行精确计算的
    2. 【重要!!!】创建BigDecimal的对象,构造方法使用参数类型为字符串的。
    3. 四则运算中的除法,如果除不尽请使用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
如人饮水,冷暖自知。
最后更新于 2023-07-18