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
Libérer: 2025-01-03 14:27:40
original
955 Les gens l'ont consulté

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';
}
Copier après la connexion

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";
}
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal