java中float和double的有关问题

java中float和double的问题

        很多朋友都知道java中直接用float和double运算会有精度的问题,其本质的原因是计算机只认识二进制数,直接用二进制来表示带有小数的十进制,本来就是无法做到精确地,比如0.1转换成二进制位为:

0.1(十进制) = 0.0001100110011001100......(二进制)

 

        所以在java中进行商业逻辑运算,还是要用BigDecimal,具体用法举例如下:

    public static double add(double v1,double v2){
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.add(b2).doubleValue();
    }