public class Main {
    public static void main(String[] args) {
        System.out.println(2.0-1.1);  
        
    }}输出结果是:0.89999999999
        public class Main {
    public static void main(String[] args) {
        //System.out.println(2.0-1.1);  
        float i, j, sum;
        i = Float.parseFloat("2.0");
        j = Float.parseFloat("1.1");
        System.out.println(sum = i - j);
    }}
输出结果为预想结果:0.9.如果说问题出在精度上,那float和double都是浮点数,都有误差,但之所以parsefloat之后输出结果正确是因为float的误差小于double的,看到这个0.9与0.89999999999一样,其实也是个误差值。这样理解正确吗?请高手指教。谢谢。

解决方案 »

  1.   

    public class Main {
        public static void main(String[] args) {
            //System.out.println(2.0-1.1);  
            System.out.println(new BigDecimal("2.0").subtract(new BigDecimal("1.1")));
        }}
      

  2.   

    用BigDecimal 或者System.Format
      

  3.   

    用BigDecimal 前两天也有人问了 他的参数要用一个string
    System.Format怎么用?
    --------------
    javascript也有这个问题
    待解决~
      

  4.   


    可能我说得不够清楚吧,我的意思是说“float的误差小于double”这样理解正确吗??呵呵。
      

  5.   

    不正确。
    double精度比float高的多。
    建议看一下浮点数的二进制表示方法(IEEE754)
      

  6.   

    Math.ulp方法可能能够帮助你理解。
      

  7.   


    对对对。我理解反了,double时输出0.89999999999 ,float时输出0.9,double的精度自然要高得多不好意思。多谢指点。。