下面的代码摘自《java解惑》,如果你运行该程序,你就会发现它打印的是 0.8999999999999999。public class Change{
    public static void main(String args[]){
        System.out.println(2.00 - 1.10);
}
书上面说:问题在于 1.1 这个数字不能被精确表示成为一个 double,因此它被表示成为最
接近它的 double 值。
这句话我不理解,请通俗的解释一下,谢谢!

解决方案 »

  1.   

    0.1在二进制数里面是没有办法用有限的小数位表示的,所以这只是一个近似值java里面你要做精确的计算,还是必须用BigDecimal
      

  2.   


    public class Change{
        public static void main(String args[]){
           System.out.printf("%.2f",2.00 - 1.10);//  .2f小数保留两位
                                       //  2.3f 整数保留2位,小数3位    }
        
    }/*就好比说2.00
     * 它的类型是double,它占8个字节,你写的2.0在计算机中的表示是
     * 2.00000000.......(小数点后跟N个0,具体小数点后最大几位我忘记了,我只知道整数最大是999..(一共20个9)  )
     * 2.00-0.1=1.90
     * 2.000-0.1=1.900
     * ..........
     * */
      

  3.   

    public class Change{
        public static void main(String args[]){
           System.out.printf("%.2f",2.00 - 1.10);//  .2f小数保留两位
                                       //  2.3f 整数保留2位,小数3位    }
        
    }/*就好比说2.00
     * 它的类型是double,它占8个字节,你写的2.0在计算机中的表示是
     * 2.00000000.......(小数点后跟N个0,具体几个0我忘记了我只知道整数部分最大为9999..(一共20个9))
     * 2.00-0.1=1.90
     * 2.000-0.1=1.900
     * ..........
     * */
      

  4.   

      System.out.printf("%.2f",2.00 - 1.10);这个结果就是你想要的结果