Double类型做加减乘除精度缺失问题

来源:互联网 发布:人工智能简介ppt英文 编辑:程序博客网 时间:2024/06/16 20:48

用BigDecimal类解决

  /**      * double 相加     * @param d1      * @param d2      * @return      */     public double sum(double d1,double d2){         BigDecimal bd1 = new BigDecimal(Double.toString(d1));         BigDecimal bd2 = new BigDecimal(Double.toString(d2));         return bd1.add(bd2).doubleValue();     }     /**      * double 相减      * @param d1      * @param d2      * @return      */     public double sub(double d1,double d2){         BigDecimal bd1 = new BigDecimal(Double.toString(d1));         BigDecimal bd2 = new BigDecimal(Double.toString(d2));         return bd1.subtract(bd2).doubleValue();     }          /**      * double 除法      * @param d1      * @param d2      * @param scale 四舍五入 小数点位数      * @return      */     public double div(double d1,double d2,int scale){         //  当然在此之前,你要判断分母是否为0,            //  为0你可以根据实际需求做相应的处理         BigDecimal bd1 = new BigDecimal(Double.toString(d1));         BigDecimal bd2 = new BigDecimal(Double.toString(d2));         return bd1.divide                 (bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();     }     /*    *乘法    */        public double mul(double d1, double d2){        // 进行乘法运算         BigDecimal b1 = new BigDecimal(d1);         BigDecimal b2 = new BigDecimal(d2);        return b1.multiply(b2).doubleValue();     }