Afficher un nombre à 2 décimales
Quelle est la façon correcte de le tour d'une chaîne PHP à 2 décimales?
$number = "520"; //It's a string from a DB
$formatted_number = round_to_2dp($number);
echo $formatted_number;
La sortie doit être 520.00
;
Comment le round_to_2dp()
définition de la fonction de l'être?
- Ce n'est pas vraiment "arrondi". L'arrondissement réduit la précision. Il ne sera pas ajouter des décimales d'un nombre qui n'en ont pas. Basé sur un grand nombre de réponses et de commentaires, il semble que les gens pensent que l'arrondi est quelque chose qu'il ne l'est pas.
round
est une fonction mathématique, et c'est juste un problème de formatage.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser number_format():
Exemple:
Cette fonction renvoie un chaîne.
round("520", 2)
retourne le flotteur520
, et l'écho qui ne sera évidemment pas le montrer à 2 décimales. Pour l'OP le but de montrer un nombre entier de 2 décimales par remplissage avec des zéros à la fin - vous besoin d'une forme de fonction, pas de un arrondissement de la fonction.520,00
au lieu de520.00
, cela fonctionne simplement.php 7.1.0
mais le float-casting semble inutile dans mon cas, et l'ajout ou la suppression ne sera sans effet sur le résultat final.Sinon,
520,00
? Je suppose que les autres répondre fonctionne mieux dans ce cas.Utilisation
round()
(utiliser si vous attendez un certain nombre dans le format flottant seulement, sinon utiliser number_format() comme réponse donnée par Codemwnci ):À partir de la notice:
...
http://php.net/manual/en/function.round.php
par exemple
Essayer:
La sortie sera:
+
ànumber_format
.Vous pouvez utiliser php
printf
ousprintf
fonctions:exemple avec
sprintf
:Vous pouvez exécuter même sans
echo
ainsi,ex: sprintf("%.3f",$num);
de sortie:
Sinon, avec les
printf
:de sortie:
Un autre plus exotique façon de résoudre ce problème est d'utiliser
bcadd()
avec une valeur factice pour l' $right_operand de0
.bc*
fonctions de ne pas arrondir, ils ont toujours arrondir à la baisse. Par exemple,bcadd("1.0999","0.0",1)
rendements "1.0", pas "1.1".Utiliser PHP number_format() fonction.
Utiliser PHP number_format() fonction.
par exemple,
La sortie sera:
7,234,545,423.00
round_to_2dp
est une fonction définie par l'utilisateur, rien ne peut être fait, sauf si vous avez publié la déclaration de cette fonctionCependant, je suppose que c'est ce que fait
number_format($number,2);
round_to_2dp($number);
a été conçu comme pseudo; l'OP a été de demander à quelqu'un pour lui dire quoi remplacer cette expression avec.Cette affiche exactement deux chiffres après la virgule.
Avantage:
Si vous souhaitez afficher deux chiffres après la valeur float et non pas pour int ensuite utiliser cette.
- Je faire mon propre.
Conditionnelle en arrondissant ie. afficher les décimales où c'est vraiment nécessaire, sinon nombre entier
123.56 => 12.56
123.00 => 123
Cela vous donnera 2 nombre après la virgule.
Il sera de retour de 5,98 sans arrondir le nombre.
Si vous souhaitez utiliser 2 chiffres décimaux dans l'ensemble de votre projet, vous pouvez définir
Alors la fonction suivante va produire le résultat souhaité
Mais si vous n'utilisez pas bcscale fonction, vous devez écrire le code à suivre pour obtenir votre désir résultat
Pour en savoir plus
http://php.net/manual/en/ref.bc.php
http://php.net/manual/en/function.bcscale.php
L'arrondi correctement tours, le nombre et la sprintf forces à 2 décimales si elle se trouve à seulement 1 chiffre après la virgule après arrondi.
Nombre sans tour
Voici ce que j'obtiens 2 décimales après .(dot) à l'aide de la fonction..
Les résultats de la fonction ci-dessus:
Nouvelle Réponse Correcte
Utiliser la fonction native de PHP bcdiv
N'ai pas vu celui-là encore donc, voici une autre solution avec strtok et str_pad:
Vous pouvez utiliser PHP tour (la) fonction.