Comment comparer deux valeurs doubles en Java?

Une simple comparaison de deux valeurs doubles en Java crée des problèmes. Considérons le fragment de code simple suivant en Java.

package doublecomparision; final public class DoubleComparision { public static void main(Ssortingng[] args) { double a = 1.000001; double b = 0.000001; System.out.println("\n"+((ab)==1.0)); } } 

Le code ci-dessus semble renvoyer true , l’évaluation de l’expression ((ab)==1.0) mais ce n’est pas le cas. Il renvoie false place, car l’évaluation de cette expression est 0.9999999999999999 que l’on s’attendait à ce que ce soit 1.0 ce qui n’est pas égal à 1.0 conséquent, la condition est évaluée à boolean false . Quelle est la meilleure façon de surmonter une telle situation?

Fondamentalement, vous ne devriez pas faire de comparaisons exactes, vous devriez faire quelque chose comme ceci:

 double a = 1.000001; double b = 0.000001; double c = ab; if (Math.abs(c-1.0) <= 0.000001) {...} 

Au lieu d’utiliser des doubles pour l’arithémétique décimale, veuillez utiliser java.math.BigDecimal. Cela produirait les résultats escomptés.

Pour référence, jetez un oeil à cette question de stackoverflow

Vous pouvez utiliser Double.compare ; Il compare les deux valeurs doubles spécifiées.

  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!");