¿Cómo comparar dos valores dobles en Java?

Resuelto Lion asked hace 13 años • 9 respuestas

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 truela evaluación de la expresión ((a-b)==1.0), pero no es así. En su lugar , regresa falseporque la evaluación de esta expresión es 0.9999999999999999lo que realmente se esperaba que fuera, 1.0lo cual no es igual a 1.0, por lo tanto, la condición se evalúa como booleana false. ¿Cuál es la mejor y sugerida forma de superar tal situación?

Lion avatar Nov 10 '11 22:11 Lion
Aceptado

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) {...}
Kevin avatar Nov 10 '2011 15:11 Kevin

En lugar de utilizar dobles para la aritmética decimal, utilice java.math.BigDecimal. Produciría los resultados esperados.

Como referencia, eche un vistazo a esta pregunta de stackoverflow.

Zaki Saadeh avatar Nov 10 '2011 15:11 Zaki Saadeh

Puedes usar Double.compare ; Compara los dos valores dobles especificados.

Anand avatar Jan 24 '2018 15:01 Anand