L'arithmétique à virgule flottante, un sujet complexe souvent mal compris, imprègne les systèmes informatiques modernes. Comme la plupart des nombres fractionnaires n’ont pas de représentation binaire exacte, un arrondi se produit inévitablement. Comprendre les nuances des opérations en virgule flottante est crucial, comme indiqué dans « Ce que tout informaticien devrait savoir sur l'arithmétique en virgule flottante ».
Réponse : Non, vous ne pouvez pas compter sur les paramètres de précision de php.ini pour une précision cohérente à 2 chiffres, même pour les nombres inférieurs à 10^6, car la précision la longueur peut augmenter pendant les calculs.
Réponse : Prenons l'exemple suivant avec une remise de 10 % appliquée uniquement au premier kilogramme :
ini_set('precision', 8); // Your precision $a = 5.88; // Cost of 1kg $q = 2.49; // User buys 2.49 kg $b = $a * 0.01; // 10% Discount only on the first kg echo ($a * $q) - $b;
Sortie : 14,5824
Réponse : Les paramètres de précision PHP sont pas une base fiable pour les calculs financiers ou la précision en virgule flottante. Il est préférable d'utiliser des bibliothèques ou des méthodes spécialisées.
Examinons divers exemples pour illustrer les limites de précision :
$a = 342349.23; $b = 341765.07; // Example A: precision = 20 echo $a - $b, PHP_EOL; // 584.15999999997438863 echo floatval(round($a - $b, 2)), PHP_EOL; // 584.15999999999996817 (rounding introduces instability) echo number_format($a - $b, 2), PHP_EOL; // 584.16 echo bcsub($a, $b, 2), PHP_EOL; // 584.15 // Example B: precision = 14 echo $a - $b, PHP_EOL; // 584.15999999997 echo floatval(round($a - $b, 2)), PHP_EOL; // 584.16 echo number_format($a - $b, 2), PHP_EOL; // 584.16 echo bcsub($a, $b, 2), PHP_EOL; // 584.16 // Example C: precision = 6 echo $a - $b, PHP_EOL; // 584.16 echo floatval(round($a - $b, 2)), PHP_EOL; // 584.16 echo number_format($a - $b, 2), PHP_EOL; // 584.16 echo bcsub($a, $b, 2), PHP_EOL; // 584.00 // Example D: precision = 3 echo $a - $b, PHP_EOL; // 584 echo floatval(round($a - $b, 2)), PHP_EOL; // 584 echo number_format($a - $b, 2), PHP_EOL; // 584.16 (consistent) echo bcsub($a, $b, 2), PHP_EOL; // 0.00
Ces exemples démontrent les incohérences liées au recours aux paramètres de précision PHP pour des calculs précis.
Pour des calculs financiers fiables, oubliez à propos de la virgule flottante et utilisez des cents ou envisagez la fonction number_format pour un résultat cohérent à 2 chiffres précision.
ini_set('precision', 8); $a = 0.19; $b = 0.16; $c = 0.01; $d = 0.01; $e = 0.01; $f = 0.01; $g = 0.01;
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3