Maison  >  Article  >  développement back-end  >  Comparaison décimale à virgule flottante PHP : pourquoi pas égale ?

Comparaison décimale à virgule flottante PHP : pourquoi pas égale ?

WBOY
WBOYoriginal
2024-03-08 16:24:041165parcourir

Comparaison décimale à virgule flottante PHP : pourquoi pas égale ?

Comparaison décimale à virgule flottante PHP : pourquoi pas égale ?

En programmation, nous rencontrons souvent des situations où nous devons comparer si deux décimales à virgule flottante sont égales. Cependant, lorsque nous utilisons PHP pour comparer des nombres décimaux à virgule flottante, nous constatons souvent que deux nombres à virgule flottante apparemment égaux ne sont pas égaux en raison de problèmes de précision. Cette situation est souvent déroutante. Cet article approfondira la question de la comparaison des nombres à virgule flottante en PHP et donnera des exemples de code spécifiques pour illustrer pourquoi des situations inégales se produisent lorsque des nombres à virgule flottante sont comparés.

Dans les ordinateurs, les nombres à virgule flottante sont représentés en binaire. Étant donné que le binaire ne peut pas représenter avec précision certaines décimales (telles que 0,1), les nombres à virgule flottante dans les ordinateurs sont souvent des valeurs approximatives. Cela entraîne des problèmes de précision lors de la comparaison de nombres à virgule flottante, et des situations telles que 0,1 + 0,2 != 0,3 se produisent souvent.

Illustrons ce problème à travers un exemple précis. Supposons que nous ayons deux nombres à virgule flottante 0,1 et 0,2, et que nous essayions d'utiliser PHP pour comparer si leur somme est égale à 0,3 :

$num1 = 0.1;
$num2 = 0.2;

$sum = $num1 + $num2;
$expected = 0.3;

if ($sum == $expected) {
    echo "相等";
} else {
    echo "不相等";
}

Lorsque nous exécutons le code ci-dessus, il est probable que le résultat de sortie sera "pas égal" . En effet, 0,1, 0,2 et 0,3 ne sont pas des valeurs exactes dans l'ordinateur, mais des valeurs approximatives, il y aura donc des erreurs de précision lors des comparaisons.

Pour résoudre ce problème, nous pouvons utiliser la fonction intégrée round() en PHP pour arrondir les nombres à virgule flottante afin d'éviter les erreurs de précision. Modifiez le code ci-dessus comme suit : round()来对浮点数进行四舍五入,从而避免精度误差。修改上面的代码如下:

$num1 = 0.1;
$num2 = 0.2;

$sum = $num1 + $num2;
$expected = 0.3;

if (round($sum, 10) == round($expected, 10)) {
    echo "相等";
} else {
    echo "不相等";
}

通过使用round()函数,我们将浮点数保留小数点后的位数,使计算结果更加精确。在这个代码示例中,我们使用round($sum, 10)round($expected, 10)rrreee

En utilisant la fonction round(), nous conservons le nombre de chiffres après la virgule décimale dans le nombre à virgule flottante pour rendre le résultat du calcul plus précis. Dans cet exemple de code, nous utilisons round($sum, 10) et round($expected, 10) pour comparer la somme de deux nombres à virgule flottante à la précision du valeur attendue, évitant ainsi les inégalités causées par des erreurs de précision.

En résumé, le problème de comparaison inégale des nombres à virgule flottante en PHP est principalement causé par les erreurs d'approximation et de précision des nombres à virgule flottante. Lorsque nous comparons des nombres à virgule flottante, nous devons prêter attention à la question de la précision et essayer d'éviter d'utiliser directement le signe égal pour comparer des nombres à virgule flottante. En gérant la précision de manière appropriée, nous pouvons garantir l'exactitude des comparaisons en virgule flottante, améliorant ainsi la stabilité et la fiabilité de nos programmes.

J'espère que grâce à l'introduction de cet article, les lecteurs pourront mieux comprendre les problèmes de comparaison de nombres à virgule flottante en PHP et éviter les bugs causés par des erreurs de précision dans le développement réel. 🎜

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