2009-05-28 8 views
1

Ich Abrufen eines Float-Wert aus einer MySQL-Datenbank auf einer PHP-Seite (2.5, 3.0 usw.)Bedingte Formatierung eines Schwimmers in PHP

Ich möchte diesen Wert zu formatieren, so dass, wenn es tatsächlich eine ganze Zahl Es sollte Null Dezimalstellen zeigen. (es sollte 3 anstelle von 3.0 ausgeben, aber 2.5 als 2.5 ausgeben)

Was wäre der einfachste Weg, dies zu erreichen?

Antwort

3

würde ich etwas entlang der Linien von versuchen:

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

Aber ich frage mich, ob eine effizientere Art und Weise gibt.

+0

Das ist ein Zuordnungsfehler (kann dem Ergebnis nicht zugewiesen werden einer Funktion). benutze das stattdessen: echo (intval ($ v) == $ v)? intval ($ v): $ v; – Kris

+2

Wollen Sie nicht == dort? – Sukasa

+1

Echo ($ v% 1? $ V: intval (% v)); würde deine Funktionsaufrufe um eins reduzieren, ich kann mich nicht an die Funktion erinnern, also kann ich nicht sagen, wie viel schneller es sein könnte, dann könnte es wieder schlimmer sein. – Sukasa

1

Sie könnten auch die Formatierung in Ihrer Abfrage tun, es ist wahrscheinlich schneller als es in PHP tun, vor allem, wenn Sie viele Zeilen verarbeiten müssen.

Etwas wie:

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

Die gleiche Methode für PHP gilt, wenn Sie es außerhalb der Datenbank zu tun:

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

Interessant zu beachten, dass es in der DB gemacht werden kann. In diesem Fall spielt es keine Rolle, da ich nur eine Zeile betrachte. Mein erster Gedanke war, die Modulo-Funktion in PHP zu verwenden, aber ich fragte mich, ob es einen anderen Weg gab. Danke für die Eingabe – Istari

0

Sie auch eine printf verwenden können, wenn Sie die steuern möchten Anzahl der rechts vom Dezimalpunkt angezeigten Ziffern:

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