double类型运算精度问题求解

public class testDouble {
    public static void main(String[] args) {
        Double a1 = new Double("0.1212");
        Double a2 = new Double("0.1213");
        Double a3 = new Double("0.1214");
        Double a4 = new Double("0.1215");
        Double a5 = new Double("0.1216");
        Double a6 = new Double("0.1217");
        Double b = new Double("100");
        System.out.println(a1 * b);
        System.out.println(a2 * b);
        System.out.println(a3 * b);
        System.out.println(a4 * b);
        System.out.println(a5 * b);
        System.out.println(a6 * b);
    }
}

打印结果

12.120000000000001
12.13
12.139999999999999
12.15
12.16
12.17
0.1212

在运算double类型的时候发现精度问题,百度了一下都用BigDecimal类型去计算,这样确实可以解决问题。但是没找到出现精度问题的原因。比如以上的代码为啥有的就出现了精度问题有的却没有?这究竟是怎么产生的?求解答?

 

你可能感兴趣的:(Java)