Avertissement: envisageriez-vous 0.9999999999999999
un entier? Probablement pas. Mais attention ceci:
double val = 0;
for(int i=0;i<10;i++)
System.out.println(val+=0.1);
Ceci affiche:
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
Ce qui est problématique, car à la fin du programme val
contient quelque chose que vous pensez devrait être entier, mais n'est pas.
Alors je ferais ma méthode un peu plus lent (mais plus correct) en intégrant un delta comme JUnit fait:
private static boolean isInt(double x, double delta) {
double ceil = Math.ceil(x);
return x-delta<ceil && x+delta>ceil;
}
et bien sûr fournir la même méthode avec un défaut raisonnable:
private static boolean isInt(double x) {
return isInt(x, 0.000000001);
}
Maintenant, isInt(val)
retourne finalement vrai.
C'est déjà assez rapide. – OscarRyz