¿Cómo comparar dos valores dobles en Java?
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 ((a-b)==1.0)
, pero no es así. En su lugar , regresa false
porque la evaluación de esta expresión es 0.9999999999999999
lo que realmente se esperaba que fuera, 1.0
lo 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?
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 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.
Puedes usar Double.compare ; Compara los dos valores dobles especificados.