Nachkommastellen in PHP und Javascript

Ich stellte gerade fest, dass Dezimalzahlen in meiner derzeit bearbeiteten Applikation hin und wieder ohne Nachkommastellen ausgegeben wurden. Besonders wenn es keine Dezimalen gab. Das kommt ja gerade bei Preisangaben vor. Meine Anwendung spuckt teilweise mit PHP nachbearbeitete Suchergebnisse aus MySQL aus, aber auch mit Javascript rechne ich einige Werte aus und werfe sie dem geneigten Anwender auf den Bildschirm. Wenn dann 5€ unter 6,34€ steht, sieht das beschissen aus. Gerade wenn die Werte untereinander stehen. So wie in einem Summenblock am Ende einer Rechnung beispielsweise.

Ich wollte nun diese ästhetischen Fauxpas entfernen, begab mich auf die Suche und wurde glücklicherweise auch fündig.

Nachkommastellen mit PHP ausgeben

Im Allgemeinen kommt ein halbwegs bewanderter Programmierer auf die Idee zu runden. Mittels round() geht das natürlich auch in PHP. Dumm nur wenn es nichts zu runden gibt und als Ergebnis eine glatte 5 zur Verfügung steht. Gut 5€ versteht jeder, aber auf einer Rechnung sollte da 5,00€ stehen. Aber wo nimmt man nun die zwei Nullen her?

number_format() heißt die Zauberfunktion in PHP für Nachkommastellen. (Jedenfalls ist’s für mich gerade die Zauberfunktion, weil ich keine andere kenne und sie funktioniert und außerdem mir gerade viel Zeit gerettet hat.) Die Funktion number_format(<zahl>,<Nachkommastellen>) empfängt 2 Parameter:

  • <zahl> ist die mit Nachkommastellen potentiell unterversorgte Dezimalzahl
  • <Nachkommastellen>, ist die Anzahl der Nachkommastellen.

Völlig selbsterklärend. Trotzdem zur allgemeinen Verdeutlichung noch ein Beispiel.

Angenommen ich habe eine Zahl  als Ergebnis irgendeiner Eingabe oder Berechnung (suchen Sie sich selbst ein paar Beispiele raus, die am Ende 5 ergeben!) (Los!)
Jetzt will ich die “5” mit 2 Nachkommastellen ausgeben: der Einfachheit halber mache ich das nun so:

echo number_format(5,2);

Und was kommt raus?

5,00

Cool, oder?

Weiter will ich das Thema jetzt nicht vertiefen und komme zum zweiten Teil dieses Machwerks:

Nachkommastellen mit Javascript erzwingen

Javascript ist etwas unterbelichtet, was die Ausgabe von Nachkommastellen betrifft. Das musste ich gerade feststellen. Javascript stellt sich fast genauso doof wie PHP an, wenn es um die Darstellung von Dezimalzahlen mit Nachkommastellen handelt. Und Javascript hat keine Funktion an Bord, um das Problem irgendwie zu lösen.

Aber es gibt ja unzählige Javascript-Jünger in der Welt die bestimmt schon einmal vor genau dem gleichen Problem standen wie ich gerade. Google hat sie für mich gefunden und mich auf die FAQ der Newsgroup de.comp.lang.javascript und die darin behandelte Frage “Wie kann ich Zahlen runden und ausgeben?” geführt. Darin wird u.a. gezeigt, wie man mittels Javascript kaufmännisch rundet. Man behilft sich mit einer kleinen Funktion, welche das ganze Gedöns zur Ermittlung der Nachkommastellen abnimmt. Die folgende Funktion ist von dieser Seite und wurde gerade dankenswerterweise von mir kopiert und erfolgreich getestet:

function kaufm(x) {

var k = (Math.round(x * 100) / 100).toString();

k += (k.indexOf(‘.’) == -1)? ‘.00′ : ’00’;

return k.substring(0, k.indexOf(‘.’) + 3);

}

Das klappt wunderbar. Man ruft die Funktion kaufm mit dem Wert, welchen man unbedingt mit Nachkommastellen haben möchte, auf und die Funktion gibt die Dezimalzahl mit 2 Nachkommastellen zurück. Es funktioniert wirklich, weshalb ich mir an der Stelle das genaue auseinanderklamüsern der Funktion erspare. Momentan reicht es mir, dass meine Dezimalzahlen wie Dezimalzahlen aussehen und nicht wie Integers.

Hinweis: Wenn du keine Ahnung hast, was eine FAQ ist oder was das eigentlich heißt und wo zum Geier eine Newsgroup sich zusammenfindet, dann frage ich mich allen Ernstes wieso du diesen Artikel gelesen hast. Diese Begriffe haben zwar gar nichts mit dem Problem an sich zu tun, aber ich kenne keine Programmierer, die damit nichts anfangen können. Du möchstest trotzdem wisse, das es damit auf sich hat? Schreibe mir bitte einfach einen Kommentar hier unter den Artikel.

Ich hoffe, dass dir diese Tipps weitergeholfen haben.

Schreibe einen Kommentar