Maison >développement back-end >tutoriel php >Pourquoi mes calculs PHP à virgule flottante sont-ils inexacts ?

Pourquoi mes calculs PHP à virgule flottante sont-ils inexacts ?

DDD
DDDoriginal
2024-12-21 14:45:10565parcourir

Why Are My PHP Floating-Point Calculations Inaccurate?

Imprécision à virgule flottante en PHP

Vous rencontrez des résultats inattendus lors de l'exécution d'arithmétique à virgule flottante en PHP ? Ce problème se pose en raison de la nature inhérente de la représentation à virgule flottante dans les ordinateurs.

Les nombres à virgule flottante sont des nombres binaires avec une précision limitée, entraînant des écarts entre les attentes mathématiques et les résultats réels. Cela signifie que, contrairement à l'arithmétique des nombres réels, l'arithmétique à virgule flottante peut rencontrer des inexactitudes telles que (a b)-b != a pour certaines valeurs.

Pour illustrer, considérons le code PHP :

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

La sortie est de 0,009999999999998, alors qu'on pourrait s'attendre à 0,01. Cet écart se produit parce que 34,99 et 0,01 ne peuvent pas être représentés avec précision en binaire. Au lieu de cela, des approximations sont utilisées.

Pour atténuer ce problème, plusieurs approches peuvent être utilisées :

  • Arrondissez le résultat à l'aide de round($result, 2) pour obtenir le nombre de décimales souhaité. lieux.
  • Utilisez des entiers au lieu de flottants. Si vous travaillez avec des devises, stockez les valeurs en cents (par exemple, 35,00 $ comme 3 500) et divisez le résultat par 100.

Bien que PHP ne dispose pas d'un type de données décimal, la fonction ronde et les techniques de manipulation d'entiers fournissent des solutions de contournement efficaces pour la gestion. imprécision en virgule flottante.

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