Maison >développement back-end >tutoriel php >Analyser PHP pour gérer les nombres à virgule flottante, les opérations de précision, le traitement des nombres, etc.

Analyser PHP pour gérer les nombres à virgule flottante, les opérations de précision, le traitement des nombres, etc.

藏色散人
藏色散人avant
2021-05-14 11:46:476037parcourir

Cet article vous présentera le traitement PHP des nombres à virgule flottante, les opérations de précision, le traitement des nombres, etc. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Préface

1. Les nombres à virgule flottante PHP sont utilisés pour les calculs. Si vous ne faites pas attention, des écarts se produiront, notamment dans le secteur financier et le commerce électronique. commandes et projets de centres commerciaux.

2. Les nombres à virgule flottante ont une précision limitée. Bien que cela dépende du système, PHP utilise généralement le double format IEEE 754, donc l'erreur relative maximale due à l'arrondi est de 1.11e-16. Les opérations mathématiques non fondamentales peuvent donner lieu à des erreurs plus importantes, et la propagation des erreurs lors de l'exécution d'opérations composées doit être prise en compte. Ne faites jamais confiance à un résultat à virgule flottante jusqu'au dernier chiffre et ne comparez jamais deux nombres à virgule flottante pour vérifier leur égalité. Si vous avez vraiment besoin d'une plus grande précision, vous devez utiliser des fonctions mathématiques de précision arbitraire ou la fonction gmp.

1. Fonctionnement

Erreur

 //加
 $a = 0.1; $b = 0.7; $c = intval(($a + $b) * 10); echo $c."0c6dc11e160d3b678d68754cc175188a"; //输出:7
     //减
 $a = 100; $b = 99.98; $c = $a - $b; echo $c."0c6dc11e160d3b678d68754cc175188a"; //输出:0.019999999999996
     //乘
 $a = 0.58; $b = 100; $c = intval($a * $b); echo $c."0c6dc11e160d3b678d68754cc175188a"; //输出:57
     //除
 $a = 0.7; $b = 0.1; $c = intval($a / $b); echo $c."0c6dc11e160d3b678d68754cc175188a"; //输出:6

Corriger

1. Pour les mathématiques à précision arbitraire, PHP prend en charge l'arithmétique binaire sur des nombres de toute taille et précision représentés sous forme de chaînes.
2. Manuel officiel : php.net/manual/zh/book.bc.php
3. Avant de l'utiliser, veuillez confirmer si bcmath a été installé.

 //加
 $a = 0.1; $b = 0.7; $c = intval(bcadd($a, $b, 1) * 10); echo $c."0c6dc11e160d3b678d68754cc175188a"; //输出:8
     //减
 $a = 100; $b = 99.98; $c = bcsub($a, $b, 2); echo $c."0c6dc11e160d3b678d68754cc175188a"; //输出:0.02
     //乘
 $a = 0.58; $b = 100; $c = intval(bcmul($a, $b)); echo $c."0c6dc11e160d3b678d68754cc175188a"; //输出:58
     //除
 $a = 0.7; $b = 0.1; $c = intval(bcp($a, $b)); echo $c."0c6dc11e160d3b678d68754cc175188a"; //输出:7

En plus de l'addition, de la soustraction, de la multiplication et de la division, bcmath fournit également les méthodes suivantes :

1 bccomp compare deux nombres de précision arbitraires
2. bcmod compare un module numérique de précision arbitraire
3. bcpow La puissance des nombres de précision arbitraires
4 bcpowmod Le module de puissance numérique de haute précision
5. fonctions
6. bcsqrt La racine quadratique d'un nombre de précision arbitraire

2 Solutions de traitement numérique courantes

Arrondi par arrondi (arrondi. vers le bas)

echo floor(5.1);
//输出:5

echo floor(8.8);
//输出:8

Arrondir au suivant (arrondi au supérieur)

echo ceil(5.1);
//输出:6

echo ceil(8.8);
//输出:9

Méthode d'arrondi ordinaire

echo round(5.1);
//输出:5

echo round(8.8);
//输出:9

//保留两位小数并且进行四舍五入
echo round(5.123, 2);
//输出:5.12

echo round(8.888, 2);
//输出:8.89

//保留两位小数并且不进行四舍五入
echo substr(round(5.12345, 3), 0, -1);
//输出:5.12

echo substr(round(8.88888, 3), 0, -1);
//输出:8.88

Méthode d'arrondi du banquier

1. les cinq derniers ne sont pas vides, alors ajoutez-en un. Si les cinq derniers sont vides, regardez le nombre impair ou pair, si les cinq premiers sont pairs, jetez-le. Si les cinq premiers sont impairs, ajoutez-en un.
2. Conserver deux décimales. Exemple :

 1.2849 = 1.28 -> 四舍
 1.2866 = 1.29 -> 六入
 1.2851 = 1.29 -> 五后非空就进一
 1.2850 = 1.28 -> 五后为空看奇偶,五前为偶应舍去
 1.2750 = 1.28 -> 五后为空看奇偶,五前为奇要进一

Formatage numérique (regroupement de milliers)

1. Appliqué à l'affichage des montants, comme les soldes des cartes bancaires que l'on voit souvent.

 echo number_format('10000.98', 2, '.', ','); //输出:10,000.98
     echo number_format('340888999', 2, '.', ',');
 //输出:340,888,999.00
Étude recommandée : "Tutoriel vidéo PHP"

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer