array - ¿Es válido comparar un doble con un int en java?
toarray c# (6)
Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()
Utilities.getDistance devuelve doble y getAttackRange devuelve int. El código anterior es parte de una sentencia if y debe ser verdadero. Entonces, ¿la comparación es válida?
Gracias
Al realizar operaciones (incluidas las comparaciones) con dos tipos numéricos diferentes, Java realizará una conversión de ampliación implícita. Esto significa que cuando se compara un double
con un int
, el int
se convierte en un double
para que Java pueda comparar los valores como dos s double
. Así que la respuesta corta es sí, comparando un int y un doble es válido, con una advertencia.
El problema es que no debe comparar dos valores de piontes flotantes para la igualdad utilizando los operadores ==
, <=
o >=
debido a posibles errores de precisión. Además, debe tener cuidado con los valores especiales que un doble puede tomar: NaN
, POSITIVE_INFINITY
y NEGATIVE_INFINITY
. Recomiendo encarecidamente que investigues un poco y aprendas sobre estos problemas al comparar el double
s.
Estará bien.
Java simplemente devolverá verdadero si el valor numérico es igual:
int n = 10;
double f = 10.0;
System.out.println(f==n);
El código anterior se imprime verdadero.
Esto debería estar bien. En operaciones / comparaciones de punto flotante, si un argumento es flotante / doble , el otro int también se promueve al mismo.
Sí, es absolutamente válido comparar el tipo de datos int y el tipo de datos doble.
int i =10;
double j= 10.0;
if (i==j)
{
System.out.println("IT IS TRUE");
}
Sí, es válido, y su código debería funcionar como se esperaba sin ningún problema técnico, pero esta no es la mejor práctica, los analizadores de código estático como SonarQube lo muestran como un "error" principal
Descripción del error principal de sonarQube
Entonces, la forma correcta de hacer esto puede ser,
Double.compare(val1,val2)==0
si algún parámetro no es una variable de punto flotante, se promoverá a punto flotante.
Sí, es válido: promoverá el int
a un double
antes de realizar la comparación.
Consulte la sección 15.20.1 de JLS (Operadores de comparación numérica) que enlaza con la sección 5.6.2 de JLS (Promoción numérica binaria) .
De este último:
La conversión de la primitiva de ampliación (§5.1.2) se aplica para convertir uno o ambos operandos según lo especificado por las siguientes reglas:
Si cualquiera de los operandos es de tipo doble, el otro se convierte en doble.
...