Jeu de précision pour un nombre à virgule en PHP
- Je obtenir un numéro à partir de la base de données, et ce nombre pourrait être float
ou int
.
J'ai besoin de régler la précision décimale du nombre de 3
, ce qui rend le nombre ne dépasse pas (concerne les décimales) 5.020
ou 1518845.756
.
À l'aide de PHP
round($number, $precision)
Je vois un problème:
Il arrondit le nombre. J'ai besoin d'une fonction seulement de couper les décimales court, sans changer leurs valeurs qui round( )
semble ne pas suivre.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
number_format()
de réaliser ceci:Ce serait de convertir
1518845.756789
à1518845.757
.Mais si vous voulez juste de couper le nombre de décimales à court de 3, et pas ronde, vous pouvez effectuer les opérations suivantes:
Il peut sembler intimidant au premier abord, mais le concept est vraiment simple. Vous avez un nombre, le multiplier par 103 (il devient
1518845756.789
), jette un entier, donc tout ce qui est après la 3e décimale est supprimé (il devient1518845756
), puis diviser le résultat par 103 (qui devient1518845.756
).Démo
intval($number * ($p …))
ne peut pas être représenté comme un nombre entier. Par exemple:$number = 10000000; $precision = 3;
résultats dans1410065.408
sur un ordinateur 32 bits.Le son comme
floor
avec des décimales. De sorte que vous pouvez essayer quelque chose commeSi je comprends bien, vous ne voulez pas d'arrondi à se produire et que vous voulez la précision 3.
L'idée est donc d'utiliser
number_format()
pour une précision de 4, puis de supprimer le dernier chiffre:Affiche:
plutôt que:
Liens :
number_format()
,substr()
9
et la 5ème décimale causes à rouler. Essayez avec$number = '0.00096'
par exemple.Voir cette réponse pour plus de détails.