Le plus rapide moyen le plus efficace pour déterminer la valeur décimale est entier en Java

StackOverflow https://stackoverflow.com/questions/1575052

  •  21-09-2019
  •  | 
  •  

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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top