Advertencia: ¿consideraría 0.9999999999999999
un entero? Probablemente no. Pero cuidado con esto:
double val = 0;
for(int i=0;i<10;i++)
System.out.println(val+=0.1);
Esto muestra:
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
que es problemático, porque al final del programa val
contiene algo que cree que debería ser un número entero, pero no lo es.
Así que me gustaría hacer mi método un poco más lento (pero más correcto) mediante la integración de un delta como JUnit hace:
private static boolean isInt(double x, double delta) {
double ceil = Math.ceil(x);
return x-delta<ceil && x+delta>ceil;
}
y por supuesto proporcionan el mismo método con un valor predeterminado sensata:
private static boolean isInt(double x) {
return isInt(x, 0.000000001);
}
Ahora isInt(val)
finalmente devuelve verdadero.
Eso ya es bastante rápido. – OscarRyz