Maison >développement back-end >tutoriel php >Pourquoi les nombres à virgule flottante PHP sont-ils inexacts et comment puis-je y remédier ?

Pourquoi les nombres à virgule flottante PHP sont-ils inexacts et comment puis-je y remédier ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-31 14:09:151021parcourir

Why Are PHP Floating-Point Numbers Inaccurate, and How Can I Fix It?

Précision des nombres flottants PHP : démystifier l'inattendu

En PHP, les nombres à virgule flottante peuvent donner des résultats inattendus en raison de la nature inhérente du binaire arithmétique. Contrairement aux nombres réels, les flottants binaires sont représentés avec une précision limitée, ce qui conduit à des approximations et à des inexactitudes potentielles.

Prenons l'exemple :

$a = '35';
$b = '-34.99';
echo ($a + $b);

Cela génère 0,0099999999999998 au lieu du 0,01 attendu. En effet, 34,99 et 0,01 ne peuvent pas être représentés avec précision en binaire, ce qui donne une représentation approximative.

Pour surmonter ce problème, envisagez les alternatives suivantes :

  • Arrondir le résultat : Utilisez round($result, 2) pour arrondir le résultat à deux décimales lieux.
  • Utilisation d'entiers : Pour les calculs de devises, stockez les valeurs sous forme d'entiers. Par exemple, représentez 35,00 $ par 3 500 et 34,99 $ par 3 499, et divisez le résultat par 100 après le calcul.

Il convient de noter que PHP ne dispose pas d'un type de données décimal dédié que l'on trouve dans d'autres langages, ce qui pourrait potentiellement améliorer précision dans des scénarios spécifiques. Cependant, en comprenant les limites de l'arithmétique à virgule flottante, les développeurs peuvent atténuer les résultats inattendus et garantir des calculs précis.

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