Java中double类型精度丢失的问题

为什么使用add2方法的结果是错误的?Double.toString(d1)为什么能保持double的精度不丢失?


    public static double add(double d1, double d2) {

        BigDecimal bd1 = new BigDecimal(Double.toString(d1));

        BigDecimal bd2 = new BigDecimal(Double.toString(d2));

        return bd1.add(bd2).doubleValue();

    }

    

    public static double add2(double d1, double d2) {

        BigDecimal bd1 = new BigDecimal(d1);

        BigDecimal bd2 = new BigDecimal(d2);

        return bd1.add(bd2).doubleValue();

    }


    public static void main(String[] args) {

        double d1 = 1.0000002;

        double d2 = 0.0000002;

        System.out.println(Double.toString(d1));

        System.out.println("d1 + d2 = " + (d1 + d2)); // 1.0000003999999998

        System.out.println("d1 + d2 = " + add(d1, d2)); // 1.0000004

        System.out.println("d1 + d2 = " + add2(d1, d2)); // 1.0000003999999998

    }

PS:引出一个概念问题:


double d = XXXX.XXXXXX;

System.out.println(d);    //这里总是不会丢失精度的,为什么?


拉莫斯之舞
浏览 511回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java