System.out.println(2.00-1.10)
为什么输出0.8999999999999999

解决方案 »

  1.   


    public class test {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println(2.0 - 1.1);
    System.out.println((float)(2.0 - 1.1));
    System.out.println((double)(2.0 - 1.1));
    }
    }
    0.8999999999999999
    0.9
    0.8999999999999999说明自动转换成double型了
    具体就不知道了
      

  2.   

    2.00  1.10   默认应该是double类型
      

  3.   

    计算机坐减法时,采用的好像是二进制补码,如果直接用double进行减法操作,会因为精度问题而出现偏差.
    最好采用Bigdecimal类进行转换,这样可以保证正确结果.
    package cn.zhangli.util;import java.math.BigDecimal;public class Bigdecimal {
    public static void main(String[] args) {
    BigDecimal first = new BigDecimal(2.0 + "");
    BigDecimal second = new BigDecimal(1.1 + "");
    BigDecimal result = first.subtract(second);
    System.out.println(result.toString());
    }}
      

  4.   

    精度的问题,如果一个浮点数大的话,这个数加上30或者50,它还不会变化。建议研究一下,Math.ulp()函数(arg0);