Maison >développement back-end >tutoriel php >Pourquoi la comparaison directe des flotteurs ne fonctionne-t-elle pas en PHP et comment pouvons-nous les comparer de manière fiable ?
Gestion de la comparaison de flotteurs en PHP
La comparaison de flotteurs en PHP peut conduire à des résultats inattendus en raison des limites de l'arithmétique à virgule flottante.
Instance de problème
Considérez ce qui suit extrait de code :
$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, $a et $b représentent la même valeur numérique (0,17), mais la comparaison utilisant == renvoie le résultat de la condition else.
Solution
Comparer les flottants pour l'égalité à l'aide d'une comparaison stricte (==) n'est pas fiable en raison de l'imprécision de la virgule flottante. Pour résoudre ce problème, envisagez d’utiliser un seuil de différence acceptable à des fins de comparaison. Par exemple :
if (abs(($a - $b) / $b) < 0.00001) { echo "a and b are same"; }
Dans ce code, la fonction abs() prend la différence absolue entre $a et $b, puis divise le résultat par $b. La comparaison est effectuée par rapport à un petit seuil pour tenir compte de l'imprécision des virgules flottantes.
Mise en garde
Bien que cette approche fournisse une solution raisonnable pour la comparaison d'égalité des flottants, elle est Il est essentiel de se rappeler que les valeurs à virgule flottante sont intrinsèquement imprécises et que l'égalité exacte peut ne pas toujours être représentée avec précision.
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!