Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()
Utilities.getDistance renvoie double et getAttackRange renvoie int. Le code ci-dessus fait partie d'une instruction if et doit être vrai. La comparaison est-elle valide?
Merci
Oui, c'est valide - cela va promouvoir la int
à une double
avant d'effectuer la comparaison.
Voir Section JLS 15.20.1 (Opérateurs de comparaison numériques) qui relie à Section JLS 5.6.2 (Promotion numérique binaire) .
De ce dernier:
L'élargissement de la conversion de la primitive (§5.1.2) est appliqué pour convertir l'un des opérandes ou les deux, comme spécifié par les règles suivantes:
Si l'un des opérandes est de type double, l'autre est converti en double.
...
Lors de l'exécution d'opérations (y compris des comparaisons) avec deux types numériques différents, Java effectue une conversion d'élargissement implicite. Cela signifie que lorsque vous comparez une double
à une int
, la int
est convertie en une double
afin que Java puisse ensuite comparer les valeurs avec deux double
s. Donc, la réponse courte est oui, comparer un int et un double est valide, avec une mise en garde.
Le problème est que vous ne devez pas comparer l'égalité de deux valeurs de points flottants flottantes à l'aide d'opérateurs ==
, <=
ou >=
en raison d'éventuelles erreurs de précision. De même, vous devez faire attention aux valeurs spéciales qu'un double peut prendre: NaN
, POSITIVE_INFINITY
et NEGATIVE_INFINITY
. Je vous suggère fortement de faire des recherches et de vous renseigner sur ces problèmes lorsque vous comparez double
s.
Cela devrait aller. Dans les opérations/comparaisons en virgule flottante, si un argument est flottant/double alors l'autre argument étant int est également promu au même.
oui, il est absolument valide comparer le type de données int et le type de données double ..
int i =10;
double j= 10.0;
if (i==j)
{
System.out.println("IT IS TRUE");
}
Oui, c’est valide, et votre code devrait fonctionner comme prévu, sans aucune anomalie, mais ce n’est pas la meilleure pratique.
Description d'un bug majeur de sonarQube
alors, la bonne façon de faire peut être,
Double.compare(val1,val2)==0
si un paramètre n'est pas une variable à virgule flottante, il sera promu en virgule flottante.
Ça va aller.
Java retournera simplement vrai si la valeur numérique est égale:
int n = 10;
double f = 10.0;
System.out.println(f==n);
Le code ci-dessus est vrai.