我记得有一次面试,大概是这个题目,问双精度的数字比较问题,答案是不等于,因为精度问题,谁能启发一下,题目应该是什么,考查点是什么,谢谢

解决方案 »

  1.   

    显然不等,
    兄弟,现在是计算机事件,比较二者是不是 ==,首先也得比较类型啊,类型都不match,怎么可能相等呢?
      

  2.   

    char byte short ->int->float->double->Sring
      

  3.   

    应该是把1转型为float,再比较的.
      

  4.   

    System.out.println(1==1.0);你看看输出什么
      

  5.   

    应该是等的,它会自动的进行类型向上转换,int与float比较,int会自动转换为float型
      

  6.   

    这个问题挺麻烦的 
    int i = 1;
    float j = 1.0f;
    double k = 1.0;
      
    System.out.println(i == j);
    System.out.println(i == k);
    System.out.println(j == k);

    float l = 1.000000001f;
    double m = 1.000000001;

    System.out.println(i == l);
    System.out.println(i == m);
    System.out.println(l == m);
      

  7.   

    不过我想下面的代码就能说明问题了。int i = 1;
    float j = 1.0f;
    double k = 1.0;

    System.out.println(Integer.toHexString(i));
    System.out.println(Float.toHexString(j));
    System.out.println(Double.toHexString(k));

    System.out.println(i == j);
    System.out.println(i == k);
    System.out.println(j == k);

    float l = 1.000000001f;
    double m = 1.000000001;

    System.out.println(Float.toHexString(l));
    System.out.println(Double.toHexString(m));

    System.out.println(i == l);
    System.out.println(i == m);
    System.out.println(l == m);输出1
    0x1.0p0
    0x1.0p0
    true
    true
    true
    0x1.0p0
    0x1.000000044b83p0
    true
    false
    false
      

  8.   

    就如12#所言 最好不要拿精度不一致的两个数进行比较 会有不确定的答案上面的1.0f和1.0 以及l和m 就能说明问题了
      

  9.   

    System.out.println(1==1.0);
    编译结果:true
      

  10.   

    1==1.0,在比较过程中会自动做类型转换,
    由于1和1.0都可以用二进制精确表示,所以结果为true;
    如果拿来比较的数字不能用二进制精确表示,则会返回false;
      

  11.   

     short ->int->float->double->Sring
      

  12.   

    原来看到一本书上说过这点,浮点数不应该进行相等比较,因为其精度是不确定,如果一定需要比较相等,应当使用类似0.00009<d<1.00001方式确定其相等
      

  13.   

    出题的意思是(float)转换下
      

  14.   

    面试题可能是这样的?
    double num = 1.0;
    num /= 49;
    num *= 49;//这里意思是进行一些运算
    System.out.println(num);//打出来是0.9999999999999999
    System.out.println(num == 1);
    大概的意思应该是这样的了。
    所有精度问题的原因都是因为进行运算时做了取舍造成不准确/或者有些数本身就不能用double精确表示。
      

  15.   


    如果真要用double,比较大小的话就用这种方法咯
      

  16.   

    我怎么觉得是把float转换为INT再比较了,JAVA不是向高级转吗?
      

  17.   

    java进行二元操作时,如果其中一个数是float类型,另外一个数会转换为float类型。
      

  18.   


    毫无疑问,他们是相等,虽然,类型不同,因为 int 与 float 比较时,int 类型首先也会传唤成float,
    最终还是float 与float 相比较大小,这与 float s=0.0;s=s+1 与 s+=1是 一样的问题
      

  19.   


    20楼是正确的。
    经过几次计算后,1.0有可能被变成1.000000007,这时是不相等的。
    所以浮点数应该这样比较是否相等:0.999999 <d <1.00001
      

  20.   

    包括原始类型
    float ==int 
    int ==double 
    int ==long
    equals()
    都是false;
      

  21.   

    根据 JVM specifications 说的,JVM只提供对int和浮点型的instructions。之间的操作要么转为int要么转为浮点型。