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

时间:2017-05-23 09:08:32

标签: java modulo

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

这是我的代码:

double val1 = 0.75;
double val2 = 0.25;

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

3 个答案:

答案 0 :(得分:1)

正如其他答案中所提到的,你应该将它与小值而不是整数进行比较,原因是:

考虑两个值:1.0 and 0.1。如果您执行1.0 % 0.1,则会因舍入错误而提供0.09999999999999995。所以如果你要与Integer进行比较,它将返回false。

正如回答@MauricePerry所述,以下是最佳做法。

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

答案 1 :(得分:0)

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

更新

顺便说一下:你比较模数和(0)的整数将在比较前转换为双。

答案 2 :(得分:0)

是!

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