Lorsque vous effectuez des opérations mathématiques précises en PHP, les calculs conventionnels des points flottants entraînent souvent une perte de précision. Surtout lorsqu'ils traitent de domaines tels que la monnaie et le profit, les problèmes de précision sont particulièrement importants. PHP fournit une bibliothèque d'extension mathématique très puissante - BCMATH (grands nombres), qui est spécialement utilisé pour résoudre de grands nombres et des problèmes de calcul de haute précision. BCSub et BCMUL sont deux fonctions de la bibliothèque BCMATH qui peuvent être utilisées ensemble pour assurer une haute précision lors du calcul des bénéfices.
BCMUL (String $ Left_Operand, String $ Right_Operand, int $ scale = 0) : utilisé pour calculer la multiplication de deux nombres et spécifiez le nombre de décimales pour retourner le résultat. $ Left_Operand et $ right_perand sont deux opérandes pour effectuer des opérations de multiplication. $ l'échelle est utilisée pour contrôler la précision après le point décimal, et la valeur par défaut est 0.
BCSUB (String $ Left_Operand, String $ Right_Operand, int $ scale = 0) : utilisé pour calculer la soustraction de deux nombres et peut spécifier le nombre de décimales qui renvoient le résultat. $ Left_Operand est le soustrait, $ right_opeand est l'échelle soustraite, et $ l'échelle est également utilisée pour spécifier le nombre de décimales, la valeur par défaut est 0.
Dans le processus de calcul des bénéfices, nous devons souvent effectuer des opérations telles que l'addition, la soustraction et la multiplication. Supposons que nous devons d'abord calculer les ventes lors du calcul du profit, puis soustraire le coût des ventes et enfin obtenir le profit.
Par exemple, lorsqu'une entreprise vend un produit, le prix est de 100 yuans, le coût de production est de 60 yuans et les taxes représentent 10% des ventes. Ensuite, les étapes du calcul des bénéfices peuvent être décomposées comme suit:
Calculer les taxes pour les ventes : les taxes représentent 10% des ventes, nous utilisons BCMUL pour calculer les taxes.
Calculer le profit : le profit est des ventes moins les coûts de production et les taxes, c'est-à-dire le profit = les ventes - coûts - taxes. Ici, nous utilisons BCSub pour soustraire d'abord les coûts, puis les taxes pour assurer la précision des résultats.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Définir la précision</span></span><span>
</span><span><span class="hljs-variable">$scale</span></span><span> = </span><span><span class="hljs-number">2</span></span><span>; </span><span><span class="hljs-comment">// Gardez deux décimales</span></span><span>
</span><span><span class="hljs-comment">// Prix et coût du produit</span></span><span>
</span><span><span class="hljs-variable">$sales_price</span></span><span> = </span><span><span class="hljs-string">'100.00'</span></span><span>; </span><span><span class="hljs-comment">// Prix de vente</span></span><span>
</span><span><span class="hljs-variable">$cost_price</span></span><span> = </span><span><span class="hljs-string">'60.00'</span></span><span>; </span><span><span class="hljs-comment">// Prix de revient</span></span><span>
</span><span><span class="hljs-comment">// Calculer les taxes et les frais(Le taux d'imposition est10%)</span></span><span>
</span><span><span class="hljs-variable">$tax_rate</span></span><span> = </span><span><span class="hljs-string">'0.10'</span></span><span>; </span><span><span class="hljs-comment">// 10%taux d'imposition</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">$sales_price</span></span><span>, </span><span><span class="hljs-variable">$tax_rate</span></span><span>, </span><span><span class="hljs-variable">$scale</span></span><span>); </span><span><span class="hljs-comment">// Prix de vente * taux d'imposition</span></span><span>
</span><span><span class="hljs-comment">// Calculer le profit</span></span><span>
</span><span><span class="hljs-variable">$profit</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bcsub</span></span><span>(</span><span><span class="hljs-variable">$sales_price</span></span><span>, </span><span><span class="hljs-variable">$cost_price</span></span><span>, </span><span><span class="hljs-variable">$scale</span></span><span>); </span><span><span class="hljs-comment">// Prix de vente - Prix de revient</span></span><span>
</span><span><span class="hljs-variable">$profit_after_tax</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bcsub</span></span><span>(</span><span><span class="hljs-variable">$profit</span></span><span>, </span><span><span class="hljs-variable">$tax</span></span><span>, </span><span><span class="hljs-variable">$scale</span></span><span>); </span><span><span class="hljs-comment">// profit - Taxes</span></span><span>
</span><span><span class="hljs-comment">// Résultat de sortie</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Ventes: <span class="hljs-subst">$sales_price</span></span></span><span>\n";
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"coût: <span class="hljs-subst">$cost_price</span></span></span><span>\n";
</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-keyword">echo</span></span><span> </span><span><span class="hljs-string">"profit: <span class="hljs-subst">$profit_after_tax</span></span></span><span>\n";
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Définition de la précision : en définissant $ SCALE = 2 , nous spécifions que le résultat conserve deux décimales. Cela garantit que chaque étape du calcul peut maintenir une précision élevée et éviter les erreurs de fonctionnement du nombre de points flottants.
Calcul de l'impôt : Nous utilisons la fonction BCMUL pour calculer les taxes, qui multiplient les ventes par les taux d'imposition et renvoie un résultat décimal exact. Le taux d'imposition ici est de 0,10, ce qui signifie 10% de la taxe.
Calcul des bénéfices : Lors du calcul des bénéfices, nous utilisons d'abord la fonction BCSub pour soustraire les coûts des ventes, puis soustrayons les taxes et les frais, et enfin obtenons des bénéfices précis.
Dans le fonctionnement conventionnel du point flottant, lors du calcul des opérations de haute précision telles que la monnaie, vous rencontrez souvent des problèmes de perte de précision. Par exemple:
<span><span><span class="hljs-variable">$price</span></span><span> = </span><span><span class="hljs-number">100.00</span></span><span>;
</span><span><span class="hljs-variable">$cost</span></span><span> = </span><span><span class="hljs-number">60.00</span></span><span>;
</span><span><span class="hljs-variable">$tax</span></span><span> = </span><span><span class="hljs-variable">$price</span></span><span> * </span><span><span class="hljs-number">0.10</span></span><span>;
</span><span><span class="hljs-variable">$profit</span></span><span> = </span><span><span class="hljs-variable">$price</span></span><span> - </span><span><span class="hljs-variable">$cost</span></span><span> - </span><span><span class="hljs-variable">$tax</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$profit</span></span><span>;
</span></span>
Cette méthode de fonctionnement peut conduire à des résultats inexacts en raison de la limitation de précision des nombres à virgule flottante. L'utilisation de BCSub et BCMUL peut garantir que la précision ne sera pas perdue même dans des opérations complexes.
Dans PHP, BCSub et BCMUL sont des outils puissants pour les calculs mathématiques de haute précision, qui sont particulièrement adaptés à une utilisation dans des scénarios impliquant la finance, la fiscalité et d'autres scénarios qui nécessitent une haute précision. En définissant raisonnablement les paramètres de précision, vous pouvez vous assurer qu'il n'y a pas d'erreur d'arrondi à chaque étape du calcul, évitant ainsi des calculs de bénéfices incorrects.