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

标签 java double

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

double a=0.0;
double b=
.
.
.

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

最佳答案

I know double should not be compared by == 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;
}

If a is not modified, does a*b==0 always true?

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

关于java - 如果double a=0.0,我可以直接比较a*b==0吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39115249/

相关文章:

java - 我怎样才能使选择升序和降序问题防错?

java - Java Swing 游戏中重置倒计时器不起作用 + JDialog/JOptionPane

java - 归一化 double 值时的 NAN

java - 为什么 long 在 Java 中被转换为 double?

Java从字节数组中提取 double

java - 一次登录应用程序 - FirebaseAuth

java - tomcat8 中的 Log4j 不显示日志

java - 如何对有界缓冲区实现同步检查以避免竞争条件?

java NaN 和 -infinity

java - 数字文字后缀的编码约定?