Le plus rapide moyen le plus efficace pour déterminer la valeur décimale est entier en Java
Question
Étant donné une double variable nommée sizeValue
et sizeValue
contient autre chose que 0, ce qui est la façon la plus efficace de déterminer que sizeValue
contient une valeur qui est un entier?
Actuellement, je suis en utilisant
sizeValue% 1 == 0
toute autre manière plus rapide?
La solution
donner un essai à Math.ceil :
private static boolean isInt(double x) {
return x == Math.ceil(x);
}
EDIT
Je l'ai fait quelques points de repère avec les méthodes suivantes:
private static boolean isInt1(double x) {
return x == (int) x;
}
private static boolean isInt2(double x) {
return x == Math.ceil(x);
}
private static boolean isInt3(double x) {
return x % 1 == 0;
}
isInt1
est la plus rapide d'entre eux (sur une sunjre 1,6)
Autres conseils
Je ne sais pas si elle est plus vite, mais vous pouvez jeter votre double pour un entier et un test pour l'égalité:
double d = 123.456;
boolean dIsAnInteger = (d == (int)d);
Attention: 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 val
programme contient quelque chose que vous pensez devrait être entier, mais n'est pas.
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);
}
isInt(val)
enfin retourne vrai.