float f = 66.0f;
System.out.println(f==66.0);
结果: true
float f1 = 66.1f;
System.out.println(f1==66.1);
结果:false为什么?

解决方案 »

  1.   

    估计是:
    因为66.0,66.1默认为double类型.
    比较的话,66.0忽略了后面的精度
    66.1会比较后面的精度,float,double后面的长度是不一样的!期待正确答案...
      

  2.   

    Float f = 66.0f; 
    System.out.println(f==66.0); 


    Float f1 = 66.1f; 
    System.out.println(f1==66.1); 

    double d = f;
    double d1 = f1;
    System.out.println(d);//结果为66.0
    System.out.println(d1);//结果为66.0999984741211

    经过测试是这样的..
      

  3.   

    float f1 = 66.1f; 
    System.out.println(f1==(float)66.1); 
    这样就是true了
      

  4.   

    关于浮点数的比较不能这么直接比的只能通过一个区间去比较比如float f = 6.1;要想将f 和 6.1比较大小的话,最好这样 if (((f - 6.1) < 0.001) && ((f - 6.1) > -0.001));即比较他的绝对值。。
      

  5.   

    谢谢楼上朋友们的回答说的似乎都有道理,能系统的讲点么,知道的朋友
    ------
    关于浮点数的比较不能这么直接比的 只能通过一个区间去比较比如float f = 6.1; 要想将f 和 6.1比较大小的话,最好这样 if (((f - 6.1) < 0.001) && ((f - 6.1) > -0.001)); 即比较他的绝对值。。--------
    这个似乎较全面,
      

  6.   

    ----
    关于浮点数的比较不能这么直接比的 只能通过一个区间去比较比如float f = 6.1; 要想将f 和 6.1比较大小的话,最好这样 if (((f - 6.1) < 0.001) && ((f - 6.1) > -0.001)); 即比较他的绝对值。。 -------- 
    这个似乎较全面, 但是比较式中的0.001是如何设置的?
      

  7.   

    //---------代码组 1---------
     float f = 66.0f; 
     System.out.println(f ==66.0);  // true //---------代码组 2---------
     float f1 = 66.1f; 
     System.out.println(f1 ==66.1); // false//=================================================//---------代码组 3---------
     double f0 = 66.0;
     System.out.println(f0==66.0);  // true //---------代码组 4---------
     double f01 = 66.1;
     System.out.println(f01==66.1); // true 
        从以上的代码运行结果,个人分析如下:
    首先要清楚的是:
        1. 对于基本类型 ,== 比较的其"值"是否相等
        2. java中凡没明确定义类型的小数,其默认类型都是double    对于代码组1,2来说,== 前面是float类型(明确定义的), ==后面是double类型(java自动转化的),二者作 == 比较时,类型不同不能直接比较,java会自动把后者(== 后面的double类型)转化为float类型; 由于double是64位,而float是32位; 转化的过程中可能精度丢失(66.0不会丢失精度,其它的丢失如66.1等),这也是1楼的朋友上级求证的结果    对于代码组3,4,==前面是double类型,等号后面也是double类型,类型匹配,不存在转化丢失精度的问题,==比较时就相等  
       注: 以上红色字体为个人推测,知道的朋友请确认下
      

  8.   

    “二者作 == 比较时,类型不同不能直接比较,java会自动把后者(== 后面的double类型)转化为float类型;”这句话,还值得推敲,java会“自动“把float转化为double,不会”自动“把double转为float,可能更好的理解是”“二者作 == 比较时,类型不同不能直接比较,java会自动把“前者"(== 前面的float类型)转化为double类型;在转化的过程中,精度丢失(参见2楼)”,这样更贴切些?
      

  9.   

    float与double做比较,是把 float类型转化为double,但有时会>,<,==等都会有可能。
      

  10.   

    但有时会>, <,==等都会有可能。 
    ---
    何意?