<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Cette partie du code n'a rien à voir avec le contenu de l'article,Par exemple seulement</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Bienvenue à lire cet article!"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
exister PHP Utilisé dans </span><span><span class="hljs-title function_ invoke__">floor</span></span><span>() Conseils pour la fonction évitant les erreurs d'arrondi en décimales
exister进行数值计算时,En particulier l'opération d'arrondi impliquant des décimales,PHP Fonctions intégrées </span><span><span class="hljs-title function_ invoke__">round</span></span><span>() Parfois, cela est dû à la précision des nombres de points flottants,Les résultats ne sont pas satisfaisants。Par exemple,Lorsque vous avez besoin de prix、Lors du traitement des données telles que les taux d'intérêt,</span><span><span class="hljs-title function_ invoke__">round</span></span><span>() Des résultats inexacts peuvent être produits,Cela affecte la logique et la sortie finale du programme。
</span><span><span class="hljs-comment">## Questions fréquemment posées</span></span><span>
PHP Limite de précision des points flottants,Cause comme </span><span><span class="hljs-number">1.005</span></span><span> De tels nombres </span><span><span class="hljs-title function_ invoke__">round</span></span><span>() Lors du traitement,S'attendre à être </span><span><span class="hljs-number">1.01</span></span><span>,Mais le résultat peut être </span><span><span class="hljs-number">1.00</span></span><span>。这是因为浮点数exister计算机内部是以二进制形式存储的,De nombreux chiffres décimaux décimaux ne peuvent pas être exprimés avec précision,Cause d'erreur。
```php
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">round</span></span><span>(</span><span><span class="hljs-number">1.005</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>); </span><span><span class="hljs-comment">// Sortir 1</span></span><span>
</span></span>
La fonction de plancher () est arrondi vers le bas. Bien que cela ne ressemble pas à l'arrondi, si vous amplifiez et ajustez correctement la valeur numérique, vous pouvez obtenir l'effet de "rester à la limite inférieure la plus proche" pour éviter l'erreur causée par l'arrondi des nombres de points flottants.
Amplifier le nombre au chiffre décimal correspondant, comme conserver deux chiffres décimaux, puis l'aggraver par 100 fois;
Ajouter une petite valeur de décalage (telle que 0,00001) au nombre agrandi pour éviter les erreurs de point flottantes;
Utilisez le sol () pour arrondir;
Revenez à sa taille d'origine.
Exemple de code:
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">floor_round</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$number</span></span></span><span>, </span><span><span class="hljs-variable">$precision</span></span><span> = </span><span><span class="hljs-number">2</span></span><span>) {
</span><span><span class="hljs-variable">$multiplier</span></span><span> = </span><span><span class="hljs-title function_ invoke__">pow</span></span><span>(</span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-variable">$precision</span></span><span>);
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">floor</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span> * </span><span><span class="hljs-variable">$multiplier</span></span><span> + </span><span><span class="hljs-number">0.00001</span></span><span>) / </span><span><span class="hljs-variable">$multiplier</span></span><span>;
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">floor_round</span></span><span>(</span><span><span class="hljs-number">1.005</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>); </span><span><span class="hljs-comment">// Sortir 1.00,Mais vous pouvez ajuster la valeur de décalage en fonction de vos besoins pour obtenir des résultats plus précis</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">floor_round</span></span><span>(</span><span><span class="hljs-number">1.2349</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>); </span><span><span class="hljs-comment">// Sortir 1.23</span></span><span>
</span></span>
La taille de la valeur de décalage doit être ajustée en fonction de la plage des données réelles pour éviter les écarts numériques inattendus.
Si vous avez besoin d'effets d'arrondissement stricts, il est recommandé d'utiliser des extensions mathématiques multi-procisions telles que BCMATH ou GMP.
Floor () convient principalement pour "arrondir", ce qui est utile pour éviter les scénarios "multiples" ou "multiples".
L'utilisation de la fonction de plancher () combinée avec un grossissement et de minuscules valeurs de décalage peut éviter efficacement l'erreur causée par des nombres de points flottants d'arrondissement. C'est une astuce pratique pour traiter les données financières ou métrologiques. Comprendre le mécanisme sous-jacent des nombres de points flottants et de sélection rationnellement des fonctions et des algorithmes peut rendre votre programme PHP plus stable et fiable.
<span><span><span class="hljs-comment">// La fin n'est pas liée au contenu de l'article</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Merci d'avoir lu,au revoir!"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>