8

对于 x 的什么值,测试 (x == 0) 返回 true?当且仅当 x = 0 时,是否存在某种余量或测试是否返回 true?

4

3 回答 3

11

Math.signum(x)== 0 时。

x检查 float == 0是否的所有其他尝试可能会失败。

但 Math.signum() 是如此基本,它永远不会失败。

于 2015-04-11T21:10:42.803 回答
9

可以编写一个简单的方法来找到这个值。

public class FloatEqualsZero {
    public static void main(String [] args) {
        float x = 1;
        while(x != 0 && -x != 0) {
            x *= 0.1;
            System.out.println(x);
        }
    }
}

这将输出以下内容:

0.1
0.01
9.999999E-4
9.999999E-5
9.999999E-6
9.999999E-7
...
1.0E-37
1.0E-38
1.0E-39
1.0E-40
1.0E-41
1.0E-42
1.0E-43
9.8E-45
1.4E-45
0.0

这个(和类似的测试)表明 (x == 0) 只有当 x 为 0.0f 或 -0.0f 时才真正成立

于 2013-10-16T07:42:47.303 回答
3

当它等于0.0或时-0.0

public void test() {
  double x = 0.0;
  double y = -0.0;
  double z = 0.0;
  test(x, y);
  test(y, z);
  test(x, z);
  test(x, (int)y);
  test(y, (int)z);
  test(x, (int)z);

}

private void test(double x, double y) {
  System.out.println("x=" + x + " y=" + y + " \"x == y\" is " + (x == y ? "true" : "false"));
}

private void test(double x, int y) {
  System.out.println("x=" + x + " y=" + y + " \"x == y\" is " + (x == y ? "true" : "false"));
}

印刷

x=0.0 y=-0.0 "x == y" is true
x=-0.0 y=0.0 "x == y" is true
x=0.0 y=0.0 "x == y" is true
x=0.0 y=0 "x == y" is true
x=-0.0 y=0 "x == y" is true
x=0.0 y=0 "x == y" is true
于 2013-10-16T08:09:28.160 回答