2009-05-28 7 views
1

je récupérer une valeur flottante à partir d'une base de données MySQL sur une page php (2.5, 3.0, etc.)Mise en forme conditionnelle d'un flotteur en PHP

Je voudrais formater cette valeur de sorte que si elle est en réalité un entier , il devrait montrer zéro décimales. (il devrait sortir 3 au lieu de 3.0, mais 2.5 comme sortie 2.5)

Quelle serait la manière la plus simple d'y parvenir?

Répondre

3

Je voudrais essayer quelque chose le long des lignes de:

echo (intval($v) == $v) ? intval($v) : $v; 

Mais je me demande s'il y a un moyen plus efficace.

+0

est une erreur d'affectation (impossible d'affecter au résultat d'une fonction). utilisez ceci à la place: echo (intval ($ v) == $ v)? intval ($ v): $ v; – Kris

+2

Ne voulez-vous pas utiliser == là? – Sukasa

+1

Également, echo ($ v% 1? $ V: intval (% v)); réduirait vos appels de fonction par un, je ne peux pas me rappeler la fonction ainsi je ne peux pas dire combien plus vite cela pourrait être, alors encore une fois cela pourrait être pire. – Sukasa

1

Vous pouvez également faire la mise en forme dans votre requête, elle sera probablement plus rapide que de le faire en php surtout si vous avez beaucoup de lignes à traiter.

Quelque chose comme:

SELECT 
    CASE 
     WHEN t.myColumn % 1 = 0 
      THEN FORMAT(t.myColumn, 0) 
      ELSE FORMAT(t.myColumn, 2) 
    END AS `formatted` 
    ... 
FROM myTable t 
WHERE ... 

La même méthode ne s'applique pour php si vous voulez le faire en dehors de la base de données:

$displayValue = $myValue % 1 == 0 
    ? number_format($myValue, 0) 
    : number_format($myValue, 2); 
+0

Intéressant de noter que cela peut être fait dans la base de données. Dans ce cas, cela n'a pas vraiment d'importance, car je ne regarde qu'une seule ligne. Ma première pensée était d'utiliser la fonction module en PHP mais je me demandais s'il y avait un autre moyen. Merci pour l'entrée – Istari

0

Vous pouvez également utiliser un printf si vous souhaitez contrôler la nombre de chiffres affichés à droite de la virgule décimale:

if (intval($v) == $v) printf("%d", intval($v)); else printf("%0.2f", $v);