Lors de la comparaison de nombres à virgule flottante en PHP, il est essentiel de gérer les différences subtiles dans leur représentation et leur précision. Cela peut être difficile, comme l'illustre le code suivant :
<?php $a = 0.17; $b = 1 - 0.83; // 0.17 if ($a == $b) { echo 'a and b are same'; } else { echo 'a and b are not same'; } ?>
Dans ce code, vous pouvez vous attendre à ce que la condition if soit vraie puisque $a et $b représentent la même valeur. Cependant, il est évalué de manière inattendue comme faux, indiquant que $a et $b ne sont pas égaux.
La raison de cet écart réside dans la représentation interne des nombres à virgule flottante dans les ordinateurs. Ces chiffres sont des approximations et leur précision est limitée. Lors de l'exécution de calculs à virgule flottante, de petites erreurs d'arrondi peuvent s'accumuler, conduisant à des résultats inattendus lors de leur comparaison d'égalité.
Pour résoudre ce problème, vous devez éviter de comparer les flotteurs à l'aide de l'option opérateur d'égalité stricte (==) sauf si vous êtes absolument certain qu'ils représentent la même valeur. Utilisez plutôt la fonction abs() et comparez la différence absolue entre les deux valeurs par rapport à une petite tolérance acceptable.
Par exemple, vous pouvez utiliser le code suivant pour comparer $a et $b avec une tolérance de 0,00001. :
if (abs(($a - $b) / $b) < 0.00001) { echo "a and b are same"; } else { echo "a and b are not same"; }
Cette méthode fournit un moyen plus fiable de comparer les flotteurs à des fins pratiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!