J'essaie de trouver un moyen rapide de supprimer zero decimals
des valeurs numériques comme ceci:
echo cleanNumber('125.00');
// 125
echo cleanNumber('966.70');
// 966.7
echo cleanNumber(844.011);
// 844.011
Existe-t-il un moyen optimisé de le faire?
Réponses:
$num + 0
fait l'affaire.En interne, cela équivaut à lancer pour flotter avec
(float)$num
oufloatval($num)
mais je trouve cela plus simple.la source
floatval()
fait.floatval
Le comportement de @ESCOBAR renvoie un float. Je dirais que l'utiliser comme formateur de décimales n'est pas non plus très évident ou propre.//COMMENT
vous pouvez simplement utiliser la
floatval
fonctionla source
Voici ce que j'utilise:
NB Cela suppose qu'il
.
s'agit du séparateur décimal. Il a l'avantage de fonctionner sur des nombres arbitrairement grands (ou petits) car il n'y a pas de flotteur. Il ne transformera pas non plus les nombres en notation scientifique (par exemple 1.0E-17).la source
Le simple fait d'ajouter
+
à votre variable de chaîne provoquera le typage (float) et supprimera les zéros:la source
Pour tout le monde qui vient sur ce site ayant le même problème avec les virgules, changez:
à:
S'il y a deux zéros à supprimer, passez à:
Plus ici: Numéro PHP: point décimal visible uniquement si nécessaire
la source
Si vous souhaitez supprimer les chiffres zéro juste avant pour les afficher sur la page ou le modèle.
Vous pouvez utiliser le sprintf () fonction
la source
Vous devez lancer vos numéros sous forme de flotteurs, ce qui le fera pour vous.
La sortie de ce sera ce que vous recherchez.
la source
(float)'0.1234567890124567890123456789'
devient par exemple0.12345678901246
.Il n'y a rien qui ne puisse être corrigé avec une simple regex;)
http://xkcd.com/208/
la source
0
s significatifs tels que in"100"
. Échoue également à enlever les0
s"100.010"
.$x = preg_replace("/(\.0*$)|((?<=\.\d*)0+$)/",'',$x);
Transformé en format
float
.la source
En raison de cette question est ancienne. Tout d'abord, je suis désolé pour ça.
La question porte sur le numéro xxx.xx, mais dans le cas où il s'agit de x, xxx.xxxxx ou d'un séparateur décimal de différence tel que xxxx, xxxx, cela peut être plus difficile à trouver et à supprimer zéro chiffre de la valeur décimale.
Et voici le code pour le test.
la source
Soyez prudent en ajoutant +0.
Le résultat est 1.
la source
Etrange, quand j'obtiens un numéro de la base de données avec un type "float" et si mon numéro est ex. 10000 quand je le floatval, il devient 1.
J'ai testé toutes les solutions ci-dessus mais je n'ai pas fonctionné.
la source
la source
Manière compliquée mais fonctionne:
les solutions ci-dessus sont la manière optimale, mais au cas où vous voudriez avoir la vôtre, vous pouvez l'utiliser. Ce que fait cet algorithme, il commence à la fin de la chaîne et vérifie si son 0 , s'il est défini sur une chaîne vide, puis passe au caractère suivant en arrière jusqu'à ce que le dernier caractère soit > 0
la source
Vous pouvez utiliser:
la source
C'est ma petite solution ... Peut être inclus dans une classe et définir des variables
privé $ dsepparator = '.'; // décimales privées $ tsepparator = ','; // mille
Cela peut être défini par le constructeur et changer pour la langue des utilisateurs.
la source
C'est ma solution. Je souhaite conserver la possibilité d'ajouter un séparateur de milliers
la source
Il s'agit d'une simple fonction d'une ligne utilisant rtrim, enregistrer le séparateur et le point décimal:
la source
J'ai trouvé que cette solution est la meilleure:
la source
Simple et précis!
la source
Solution ultime: le seul moyen sûr est d'utiliser regex:
cela fonctionnera dans tous les cas
la source
Ce qui suit est beaucoup plus simple
la source
la source
Ce code supprimera zéro après point et ne renverra que deux chiffres décimaux.
$ nombre = 1200,0000;
str_replace ('. 00', '', number_format ($ nombre, 2, '.', ''));
La sortie sera: 1200
la source