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 ?

Pourquoi la comparaison directe des flotteurs ne fonctionne-t-elle pas en PHP et comment pouvons-nous les comparer de manière fiable ?

DDD
DDDoriginal
2025-01-03 14:27:40911parcourir

Why Doesn't Direct Float Comparison Work in PHP, and How Can We Compare Them Reliably?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn