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

Gst*_*tso 5 java double

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

double a=0.0;
double b=
.
.
.
Run Code Online (Sandbox Code Playgroud)

如果a未被修改,a*b == 0总是如此吗?

Pet*_*rey 4

我知道 double 不应该通过 == 运算符直接进行比较

仅当您不知道有多少表示或舍入误差时,这才是正确的。不该做的事情的一个典型例子是

0.1 + 0.2 == 0.3 // false :(
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用像这样的舍入

if (round4(0.1 + 0.2) == 0.3) // true
Run Code Online (Sandbox Code Playgroud)

来自Chronicle Core 的数学

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;
}
Run Code Online (Sandbox Code Playgroud)

如果a不被修改,a*b==0总是true吗?

它适用于有限的数字。对于无穷大,NaN你会得到NaN,这不等于任何东西。