24. Testing if a double number is an integer
First of all, let’s consider the following expected results (false means that the double is not an integer):
double v1 = 23.11; // false
double v2 = 23; // true
double v3 = 23.0; // true
double v4 = Double.NaN; // false
double v5 = Double.NEGATIVE_INFINITY; // false
double v6 = Double.POSITIVE_INFINITY; // false
Most probably, the first solution for testing if a double number is an integer consists of a simple cast as follows:
public static boolean isDoubleIntegerV1(double v) {
return v == (int) v;
}
However, there are several other options. For instance, we can rely on modulus, as follows:
public static boolean isDoubleIntegerV2(double v) {
return v % 1 == 0;
}
Alternatively, we can rely on the Math.floor()
and Double.isFinite()
methods. If the given double is a finite number and is equal to the result of Math.floor()
, then...