将两个双精度值的模与 Java 中的整数进行比较是否正确?

Is it correct to compare the modulo of two double values with an integer in Java?

此代码现在运行良好,但它会在所有情况下给出正确答案吗?

这是我的代码:

double val1 = 0.75;
double val2 = 0.25;

if(val1 % val2 == 0){
    // do something
}

我不会那样做:对于这些值,结果可能是正确的,但可能不正确,比如 0.6 和 0.2。

更新

顺便说一句:您将模数与 (0) 进行比较的整数将在比较之前转换为双精度数。

如其他回答所述,您应该将其与较小的值而不是整数进行比较,原因是:

考虑两个值:1.0 and 0.1。如果您执行 1.0 % 0.1,它将给出 0.09999999999999995 作为舍入误差的结果。所以这里如果你是和 Integer 比较,它会 return false。

正如@MauricePerry 的回答中提到的,以下是最佳实践。

Math.abs(val1 % val2) < EPSILON //where EPSILON is a small value

是的!

%, 也称为模数或余数运算符。 % 运算符 returns 两个数字的余数。例如 10 % 3 是 1,因为 10 除以 3 余数为 1。 更多:go through this link