如果double a = 0.0,我可以直接比较a * b == 0吗?

时间:2016-08-24 05:43:44

标签: java double

我知道double不应该直接用==运算符进行比较,但如果我将初始值定义为0.0怎么样?例如:

double a=0.0;
double b=
.
.
.

如果未修改a,a * b == 0是否始终为真?

1 个答案:

答案 0 :(得分:4)

  

我知道双重不应该通过== operator direct

进行比较

只有在您不知道有多少表示或舍入错误时才会出现这种情况。不该做的典型例子是

0.1 + 0.2 == 0.3 // false :(

但是,如果你使用像

这样的舍入
if (round4(0.1 + 0.2) == 0.3) // true

来自Chronicle Core's Maths

public static double round4(double d) {
    final double factor = 1e4;
    return d > WHOLE_NUMBER / factor || d < -WHOLE_NUMBER / factor ? d :
            (long) (d < 0 ? d * factor - 0.5 : d * factor + 0.5) / factor;
}
  

如果未修改a,a * b == 0是否始终为真?

这是有限数字。对于无穷大和NaN,您将获得NaN,这与任何事情都不相同。