doubles - ¿Cómo comparar dos valores dobles en Java?
comparar doubles java (4)
Una simple comparación de dos valores dobles en Java crea algunos problemas. Consideremos el siguiente fragmento de código simple en Java.
package doublecomparision;
final public class DoubleComparision
{
public static void main(String[] args)
{
double a = 1.000001;
double b = 0.000001;
System.out.println("/n"+((a-b)==1.0));
}
}
El código anterior parece devolver true
, la evaluación de la expresión ((ab)==1.0)
pero no es así. Devuelve false
lugar porque la evaluación de esta expresión es 0.9999999999999999
que en realidad se esperaba que fuera 1.0
que no es igual a 1.0
, por lo tanto, la condición se evalúa como booleana false
. ¿Cuál es la mejor y más sugerida forma de superar una situación así?
Básicamente no deberías hacer comparaciones exactas, deberías hacer algo como esto:
double a = 1.000001;
double b = 0.000001;
double c = a-b;
if (Math.abs(c-1.0) <= 0.000001) {...}
En lugar de usar dobles para la aritmética decimal, usa java.math.BigDecimal. Produciría los resultados esperados.
Como referencia, eche un vistazo a esta pregunta sobre stackflow
Puedes usar Double.compare ; Compara los dos valores dobles especificados.
int mid = 10;
for (double j = 2 * mid; j >= 0; j = j - 0.1) {
if (j == mid) {
System.out.println("Never happens"); // is NOT printed
}
if (Double.compare(j, mid) == 0) {
System.out.println("No way!"); // is NOT printed
}
if (Math.abs(j - mid) < 1e-6) {
System.out.println("Ha!"); // printed
}
}
System.out.println("Gotcha!");