Java中的小数计算输出问题

    System.out.println(0.09 + 0.01);
    System.out.println(1.0-0.32);
    System.out.println(1.015 * 100);
    System.out.println(1.301 / 100);
    输出的结果是:
    0.09999999999999999
0.6799999999999999
101.49999999999999
0.013009999999999999
但是
            System.out.println(0.1);
            System.out.println(0.64);
            System.out.println(101.5);
            System.out.println(0.01301);
    输出的结果又不是。为什么呀?

    如果不进行加减直接输出小数为什么不会变

http://blog.csdn.net/xymyeah/article/details/1759943

浮点型数据不要用来桌精细运算,会有误差,原因是数的表示是用二进制表示,所有一个范围,并不能表示所有的数,如果表示不了,就只能选择一个最接近的数,误差就是
0.一大串01

浮点运算会有一些舍入误差。这就跟浮点数不能直接使用==判断相等的道理是一样的,例如判断一个变量x是否等于1.0,不能写成x==1.0,而应该写成abs(x-1.0)<eps

double型数据进行数学运算,会出现精度问题。
可以通过BigDecimal来操作。
BigDecimal bd1 = new BigDecimal("0.09");
BigDecimal bd2 = new BigDecimal("0.01");
System.out.println("add:" + bd1.add(bd2));
System.out.println("-------------------");

    BigDecimal bd3 = new BigDecimal("1.0");
    BigDecimal bd4 = new BigDecimal("0.32");
    System.out.println("subtract:" + bd3.subtract(bd4));
    System.out.println("-------------------");

    BigDecimal bd5 = new BigDecimal("1.015");
    BigDecimal bd6 = new BigDecimal("100");
    System.out.println("multiply:" + bd5.multiply(bd6));
    System.out.println("-------------------");

    BigDecimal bd7 = new BigDecimal("1.301");
    BigDecimal bd8 = new BigDecimal("100");
    System.out.println("divide:" + bd7.divide(bd8));