将两个双精度值的模与 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
此代码现在运行良好,但它会在所有情况下给出正确答案吗?
这是我的代码:
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