Dans PHP, lorsqu'il s'agit de calculs de haute précision, nous pouvons compter sur certaines bibliothèques de fonctions spéciales, BCMATH en fait partie. BCMATH fournit plusieurs fonctions pour gérer les opérations de point flottant et entier de haute précision, y compris BCMul () et BCDiv () , qui sont utilisées pour la multiplication de haute précision et les calculs de division, respectivement.
Dans cet article, nous montrerons comment utiliser BCMUL () et BCDiv () pour obtenir des calculs de haute précision à travers des cas pratiques. Comprendre leur utilisation et leurs avantages de base est une étape importante pour améliorer les exigences de précision des développeurs.
Bien que le type de nombre de points flottants par défaut de PHP ( float ) puisse gérer la plupart des opérations numériques, elle peut entraîner une perte de précision lorsqu'il est confronté à des valeurs très grandes ou très petites. Pour garantir les résultats des opérations de haute précision, l'extension BCMATH fournit une prise en charge des calculs numériques pour une précision arbitraire, ce qui nous permet d'effectuer des calculs précis sans être limité par les types de données traditionnels.
BCMUL () est une fonction de multiplication dans l'extension BCMATH , qui est utilisée pour multiplier deux nombres de haute précision. Contrairement aux opérations de multiplication conventionnelles, BCMUL () vous permet de définir la précision du calcul pour empêcher les erreurs de résultat dues à une précision insuffisante.
<span><span><span class="hljs-title function_ invoke__">bcmul</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$left_operand</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$right_operand</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$scale</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>
</span></span>
$ Left_Operand : Le premier opérande est passé sous forme de chaîne.
$ Right_Operand : le deuxième opérande, également passé dans une chaîne.
$ Scale : Paramètre facultatif, spécifiant la précision après le point décimal.
<span><span><span class="hljs-variable">$num1</span></span><span> = </span><span><span class="hljs-string">'123.456789'</span></span><span>;
</span><span><span class="hljs-variable">$num2</span></span><span> = </span><span><span class="hljs-string">'987.654321'</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bcmul</span></span><span>(</span><span><span class="hljs-variable">$num1</span></span><span>, </span><span><span class="hljs-variable">$num2</span></span><span>, </span><span><span class="hljs-number">6</span></span><span>); </span><span><span class="hljs-comment">// Le résultat de la multiplication est préservé6Décimal</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>; </span><span><span class="hljs-comment">// Sortir 121931.439820</span></span><span>
</span></span>
BCDiv () est une fonction de division dans l'extension BCMATH , utilisée pour effectuer des calculs de division sur deux nombres de haute précision. Il prend également en charge la précision de la précision de calcul pour garantir la précision des résultats.
<span><span><span class="hljs-title function_ invoke__">bcdiv</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$dividend</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$divisor</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$scale</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>
</span></span>
$ Dividend : Dividende, transmis en tant que chaîne.
$ Divisor : Diviseur, passez également dans une chaîne.
$ Scale : Paramètre facultatif, spécifiant la précision après le point décimal.
<span><span><span class="hljs-variable">$num1</span></span><span> = </span><span><span class="hljs-string">'123.456789'</span></span><span>;
</span><span><span class="hljs-variable">$num2</span></span><span> = </span><span><span class="hljs-string">'9.87654321'</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bcdiv</span></span><span>(</span><span><span class="hljs-variable">$num1</span></span><span>, </span><span><span class="hljs-variable">$num2</span></span><span>, </span><span><span class="hljs-number">6</span></span><span>); </span><span><span class="hljs-comment">// Les résultats de la division sont conservés6Décimal</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>; </span><span><span class="hljs-comment">// Sortir 12.500000</span></span><span>
</span></span>
Dans le développement réel, en particulier dans le domaine financier ou les plateformes de commerce électronique, des calculs de prix de haute précision sont souvent nécessaires. Supposons que nous devons calculer le prix total du produit, le prix réduit et les taxes. Pour éviter l'erreur du montant due à la précision de calcul flottante, nous pouvons utiliser BCMul () et BCDiv () pour gérer ces opérations.
Prix unitaire du produit: 99,99
Quantité: 10
Remise: 0,85 (réduction de 85%)
Taux d'imposition: 0,1 (taux d'imposition de 10%)
Nous calculerons le prix total de l'article, le prix réduit et le prix final après l'augmentation de la séquence d'impôt.
<span><span><span class="hljs-comment">// Prix et quantité unitaire du produit</span></span><span>
</span><span><span class="hljs-variable">$price</span></span><span> = </span><span><span class="hljs-string">'99.99'</span></span><span>;
</span><span><span class="hljs-variable">$quantity</span></span><span> = </span><span><span class="hljs-string">'10'</span></span><span>;
</span><span><span class="hljs-comment">// Calculez le prix total du produit</span></span><span>
</span><span><span class="hljs-variable">$total_price</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bcmul</span></span><span>(</span><span><span class="hljs-variable">$price</span></span><span>, </span><span><span class="hljs-variable">$quantity</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Prix total du produit:<span class="hljs-subst">$total_price</span></span></span><span>\n"; </span><span><span class="hljs-comment">// Sortir:Prix total du produit:999.90</span></span><span>
</span><span><span class="hljs-comment">// Calculez le prix après remise</span></span><span>
</span><span><span class="hljs-variable">$discount</span></span><span> = </span><span><span class="hljs-string">'0.85'</span></span><span>;
</span><span><span class="hljs-variable">$discounted_price</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bcmul</span></span><span>(</span><span><span class="hljs-variable">$total_price</span></span><span>, </span><span><span class="hljs-variable">$discount</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Prix après réduction:<span class="hljs-subst">$discounted_price</span></span></span><span>\n"; </span><span><span class="hljs-comment">// Sortir:Prix après réduction:849.91</span></span><span>
</span><span><span class="hljs-comment">// Calculer les taxes et les frais</span></span><span>
</span><span><span class="hljs-variable">$tax_rate</span></span><span> = </span><span><span class="hljs-string">'0.1'</span></span><span>;
</span><span><span class="hljs-variable">$tax</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bcmul</span></span><span>(</span><span><span class="hljs-variable">$discounted_price</span></span><span>, </span><span><span class="hljs-variable">$tax_rate</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Taxes:<span class="hljs-subst">$tax</span></span></span><span>\n"; </span><span><span class="hljs-comment">// Sortir:Taxes:84.99</span></span><span>
</span><span><span class="hljs-comment">// Calculez le prix final(Prix après réduction + Taxes)</span></span><span>
</span><span><span class="hljs-variable">$final_price</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bcadd</span></span><span>(</span><span><span class="hljs-variable">$discounted_price</span></span><span>, </span><span><span class="hljs-variable">$tax</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Prix final:<span class="hljs-subst">$final_price</span></span></span><span>\n"; </span><span><span class="hljs-comment">// Sortir:Prix final:934.90</span></span><span>
</span></span>
Pour des calculs financiers plus complexes, tels que plusieurs versements, les calculs d'intérêt composé, etc., vous pouvez également combiner BCMul () et BCDiv () pour mettre en œuvre des modèles mathématiques précis. En sélectionnant rationnellement les paramètres de précision de calcul ( échelle ), nous pouvons nous assurer que même les processus de calcul très complexes, les résultats finaux sont tenus précis.
Considérations de performance : le fonctionnement de BCMATH est plus lent que le fonctionnement de PHP natif car il fonctionne en fonction des chaînes. Néanmoins, l'informatique de haute précision est souvent un incontournable dans les scénarios d'application, donc dans ces scénarios, il vaut la peine d'utiliser BCMATH .
Évitez la perte de précision : lorsque vous utilisez BCMATH , assurez-vous toujours que les données entrantes ont été formatées sur la précision appropriée. Sinon, il peut encore y avoir des erreurs de précision dans le résultat.
Dans PHP, l'extension BCMATH nous fournit de puissantes capacités de calcul de haute précision, qui conviennent particulièrement aux scénarios de gestion tels que la finance et l'informatique scientifique qui nécessitent une grande précision. Grâce aux fonctions BCMUL () et bcDiv () , nous pouvons facilement implémenter les opérations de multiplication et de division de haute précision pour garantir la précision des résultats du calcul. Dans le développement réel, définissez la précision et l'échelle appropriées en fonction des exigences pour éviter les erreurs de calcul flottantes, obtenant ainsi des résultats fiables.