解决方案 »

  1.   

    小数在计算机中都是近似存储的,两个近似存储的数据一起计算,得到的就更近似了
    楼主可以给结果取近似值
    或 使用 BigDecimal bd1 = new BigDecimal(0.8);
    BigDecimal bd2 = new BigDecimal(47.9);
    System.out.println(bd1.add(bd2));
    得到的更近似的值 
    或使用BigDecimal bd3 = new BigDecimal(new Double(0.8).toString());
    BigDecimal bd4 = new BigDecimal(new Double(47.9).toString());
    System.out.println(bd3.add(bd4));
    得到精确值
      

  2.   

    原因在于浮点数使用二进制表示的,小数部分用2^-1+2^-2……表示.类似的式子2.0-1.1 = 0.899999。必要时要用bigdecimal
      

  3.   

    double 确实不可以,double取得只能是近似值
    浮点数存储时就已经近似存储了,再计算,就更近似了
      

  4.   

    如果数据比较多的情况下,这种方法会影响处理速度吗?这对CPU来说都是小case,现在主要的瓶颈是传输速度更不是CPU的处理速度,所以缓存技术无处不在
      

  5.   

    如果数据比较多的情况下,这种方法会影响处理速度吗?这对CPU来说都是小case,现在主要的瓶颈是传输速度更不是CPU的处理速度,所以缓存技术无处不在
    受教了
      

  6.   

    原来的问题在于:
    计算机内部用2进制保存数字,正好遇到不能用2进制严格表达的double了(比较像十进制数无法精确表达1/3一样)
    比如(0.8 + 0.8就能精确地计算出来1.6)非要用double的一种解决办法【应该是一种数值计算方法】:
    package topics_390901294;public class DoubleTest {
        public static void main(String[] args) {
            double d1 = 0.8;
            double d2 = 47.9;
            System.out.println(d1 + d2);
            System.out.println((d1 * 10.0 + d2 * 10.0) / 10.0);
        }
    }
    输出:
    48.699999999999996
    48.7
      

  7.   

    double虽然是双精度,但是计算机语言是01语言二进制,就和十进制的10除以3一样有除不尽的时候,所以会出现那种情况