dedlfix: Nachkommastellen abschneiden, wenn Null

Beitrag lesen

Hi!

sorry für die offensichtlich mehrdeutig gestellte Frage!
Wie es aussieht bin ich mindestens 1x richtig verstanden worden. :-)

Geahnt, was du haben willst, habe ich auch, jedoch reicht das nicht, um konkreten Code zu produzieren. Und das "richtig verstanden" war vermutlich auch ein "richtig geraten".

Natürlich könnte ich das ganze schon kompliziert zusammenbauen, in etwa wie folgt - aber ich wäre auf der Suche nach einer eleganteren und potentiell ressourcensparenderen Lösung.

PHP hat nicht für jeden Spezialfall eine Funktion.

$zahl = ...
$zahl_formatiert = number_format();
if($zahl == $zahl_formatiert) print($zahl_formatiert);
else print($zahl);

Dürfte funktionieren, ist aber natürlich sehr unsauber, weil es damit spielt, dass PHP das mit den Variablentypen nicht so genau nimmt...

Warum soll das unsauber sein? Implizierte Typumwandlung gehört zu PHPs Philosophie und kann damit im PHP-Sinne nicht unsauber sein. Wenn du willst, und das sauberer findest, nimm explizite Typumwandlung. Ein anderes Ergebnis bekommst du damit aber nicht. Einen Einfluss kann höchstens die Ungenauigkeit der Fließkommazahlen darstellen. Nicht jede Zahl lässt sich exakt mit endlichen Ziffern abbilden, weder im Dezimal- noch im Binärsystem. Das ist jedoch prinzipbedingt und kein PHP-typisches Phänomen.

Du schriebst von Preisen. Diese sollte exakt sein und nicht am Fließkommazahlenfehler kranken. Deshalb hast du da hoffentlich einen Money- oder Decimal-Typ im DBMS verwendet. Abgesehen davon, wirst du vermutlich einen String geliefert bekommen und keinen Zahlentyp. Prüf das mal mit var_dump().

Danke auf jeden Fall schon mal für eure ganzen Antworten - und vielleicht kann mir ja nun, da die Frage anhand von Beispielen verdeutlich ist - jemand noch nen Tipp geben? Den printf()-Tipp teste ich gerade noch... vielleicht war das auch schon der entscheidende Hinweis!

Kaum, *printf() produziert keine unterschiedlichen langen Nachkommazahlen.

Lo!