Maison  >  Article  >  développement back-end  >  Le paramètre de précision php.ini de PHP peut-il garantir des calculs monétaires précis à deux chiffres ?

Le paramètre de précision php.ini de PHP peut-il garantir des calculs monétaires précis à deux chiffres ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-06 12:27:03302parcourir

 Can PHP's php.ini Precision Setting Guarantee Accurate Two-Digit Monetary Calculations?

La solution de contournement de précision php.ini de PHP peut-elle résoudre les problèmes de virgule flottante ?

Les calculs en virgule flottante peuvent être imprécis en raison des représentations binaires de la plupart des fractions. Le paramètre de précision php.ini vous permet de spécifier le nombre de chiffres sur lequel PHP calcule les valeurs à virgule flottante.

Fiabilité de la solution de contournement

Question 1 : Le peut-on s'appuyer sur une solution de contournement pour des calculs monétaires précis à deux chiffres ?

Réponse 1 : Non. Le paramètre de précision php.ini ne garantit pas des calculs précis à deux chiffres, car la longueur de précision peut augmenter pendant calculs.

Exemples d'échec

Question 2 : Pouvez-vous fournir un exemple d'échec de la solution de contournement ?

Exemple :

ini_set('precision', 8);
$a = 5.88; // cost per kg
$q = 2.49; // quantity purchased (2.49 kg)
$b = $a * 0.01; // 10% discount on first kg
echo ($a * $q) - $b; // result not precisely two digits

Meilleure valeur Php.ini.precision pour les calculs monétaires à deux chiffres

Question 3 : Quelle valeur php.ini.precision convient aux calculs monétaires à deux chiffres calculs monétaires ?

Réponse 3 : L'utilisation de la précision php.ini pour les calculs financiers n'est pas recommandée. Envisagez des solutions alternatives comme bcmmath ou number_format.

Tests simples

Exemple de code :

ini_set('precision', 20); // set to 20
$a = 342349.23;
$b = 341765.07;

echo $a - $b, PHP_EOL;
echo floatval(round($a - $b, 2)), PHP_EOL;
echo number_format($a - $b, 2), PHP_EOL;
echo bcsub($a, $b, 2), PHP_EOL;

Sortie :

584.15999999997438863
584.15999999999996817    // round is not reliable
584.16
584.15  // bcsub is more precise with precision=20

Conclusion :

Le recours à la solution de contournement de précision php.ini n'est pas fiable pour des calculs précis à deux chiffres. Pensez à utiliser bcmmath ou number_format pour des calculs financiers précis.

Mise à jour

Question 1 : La solution de contournement échouera-t-elle pour les nombres compris entre 0 et 999999,99 ?

Réponse 1 : Un test complet n'est pas pratique en raison du grand nombre de combinaisons. Cependant, un simple test avec 0,19 0,16 ... 0,01 produit un résultat inattendu (1.0408341E-17) avec une précision réglée sur 8, ce qui suggère que la solution de contournement n'est pas entièrement fiable.

Question 2 : Comment pouvons-nous estimer quand la solution de contournement échouera ?

Réponse 2 : Bien que des formules mathématiques existent, elles peuvent être complexes et pas toujours pratiques pour déterminer les points de défaillance.

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