美文网首页
BigDecimal类

BigDecimal类

作者: 七喜丶 | 来源:发表于2021-09-03 23:39 被阅读0次

    案例代码:

    public class Demo1 {
        public static void main(String[] args) {
            System.out.println(10.0 / 3.0); //结果:3.3333333333333335
        }
    }
    

    计算机底层是把看的十进制数字转化为二进制进行运算,运算结果再转化为十进制展示:


    • 在此过程中如果是整数是没有异常;如果是小数,由于计算机的存储机制问题转化为二进制是会有数据丢失,以无限接近的二进制来表示这个小数:

    虽然误差很小,但不适用于金融、证券等要求数据准确度高的项目就不太合适

    以上面的案例推出主人公:BigDecimal类

    BigDecimal

    • 运用场景
      需要进行精确计算处理场景

    • 构造方法

      方法名 说明
      BigDecimal(double val) 参数为double
      BigDecimal(String val) 参数为String

      代码展示

      public class Demo2 {
        public static void main(String[] args) {
            BigDecimal bigDouble = new BigDecimal(10.0); // 结束:10
            BigDecimal bigString = new BigDecimal("0.3"); //  结果:0.3
          }
      }
      
    • 常用方法

      方法名 说明
      public BigDecimal add(另一个BigDecimal对象) 加法
      public BigDecimal subtract (另一个BigDecimal对象) 减法
      public BigDecimal multiply (另一个BigDecimal对象) 乘法
      public BigDecimal divide (另一个BigDecimal对象) 除法
      public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式) 除法

      代码展示

      public class Demo3 {
        public static void main(String[] args) {
            //注意:如果需要精确计算,请使用字符串的构造方法
            BigDecimal b1 = new BigDecimal(0.1);
            BigDecimal b2 = new BigDecimal(0.2);
            BigDecimal b3 = new BigDecimal("0.1");
            BigDecimal b4 = new BigDecimal("0.2");
            //加法运算
            BigDecimal add = b1.add(b2);
            BigDecimal add1 = b3.add(b4);
            System.out.println(add); //0.3000000000000000166533453693773481063544750213623046875
            System.out.println(0.1 + 0.2); //0.30000000000000004
            System.out.println(add);  //0.3
            //减法
            BigDecimal subtract = b3.subtract(b4);
            System.out.println(subtract); //-0.1
            //乘法
            BigDecimal multiply = b3.multiply(b4);
            System.out.println(multiply);//0.02
            //除法
            BigDecimal divide = b3.divide(b4);
            System.out.println(divide);//0.5        
          }
      }
      
    • 总结

      1. BigDecimal是用来进行精确计算的
      2. 创建BigDecimal的对象,构造方法使用参数类型为字符串的
      3. 四则运算中的除法,如果除不尽请使用divide的三个参数的方法

      代码展示

        BigDecimal divide = bd1.divide(参与运算的对象,小数点后精确到多少位,舍入模式); 
       参数1 ,表示参与运算的BigDecimal 对象
       参数2 ,表示小数点后面精确到多少位 
       参数3 ,舍入模式 (常用)
              BigDecimal.ROUND_UP  进一法 
              BigDecimal.ROUND_FLOOR 去尾法     
              BigDecimal.ROUND_HALF_UP 四舍五入
      
      舍入模式参数对照

    相关文章

      网友评论

          本文标题:BigDecimal类

          本文链接:https://www.haomeiwen.com/subject/cwrlwltx.html