Thema in Kurzform
// Zeigt formatierten String am Bildschirm an
$number = 3.14159265359;
printf("Zahl mit 3 Dezimalstellen: %.3f", $number); // 3.142
// Liefert formatierten String zurück
$number = 3.14159265359;
$save = sprintf("Zahl mit 3 Dezimalstellen: %.3f", $number); // 3.142
// Zahlen formatieren
$betrag = 149504.154;
echo number_format($betrag, 2, "," , "."); // 149.504,15
printf() - Strings formatieren
In PHP müssen wir oft Strings am Bildschirm ausgeben. In der Regel verwenden wir hier echo, das einen String 1:1 am Bildschirm ausgibt.
Wollen wir einen String dagegen formatiert angezeigt haben, verwenden wir die Funktion printf(). Die Funktion ist etwa komplexer, deshalb sehen wir hier genauer hin.
Zunächst ein erstes Beispiel, wie das Teil funktioniert:
$number = 3.14159265359;
printf("Zahl mit 3 Dezimalstellen: %.3f", $number); // 3.142
printf() erwartet als ersten Parameter den Formatierungsstring. Dieser legt fest, wie der Output formatiert sein soll. Der Formatierungsstring enthält (neben "normalen" Text) sog. Platzhalter, markiert durch Prozentzeichen %.
Nach dem Formatierungsstring folgt mindestens ein weiterer Parameter. Beim Funktionsaufruf werden die Argumente in die Platzhalter des Formatierungsstrings eingefügt und entsprechend formatiert.
In unserem Beispiel wird der Wert von $number in den Platzhalter % eingetragen. %.3f ist der Format-Spezifikator und bewirkt, dass die Zahl auf drei Dezimale formatiert werden soll.
Wie wir gesehen haben, beginnt ein Formatierungshinweis mit einem Prozentzeichen % und endet mit einem Buchstaben. Dieser Buchstabe kann folgende Bedeutungen haben:
- %d Formatierung für Ganzzahlen
- %f für Fließkommawerte
- %s für Strings
Das allein bewirkt noch nicht viel, denn zwischen dem Platzhalter % und dem Buchstaben (d, f, s) sind noch weitere Formatierungshinweise einsetzbar, die wir uns nun nacheinander genauer ansehen.
Anzahl der Nachkommastellen
Wie eingangs schon gesehen, funktioniert das ganz einfach, indem wir zwischen dem % und dem Buchstaben f (Fließkommazahl) einen Punkt und dann die Anzahl der gewünschten Nachkommastellen notieren:
$zahl = 27;
printf("%.2f", $zahl); // 27.00
Füllzeichen
Um einen ganzzahligen Wert mit führenden Nullen zu formatieren, gehen wir so vor:
$zahl = 27;
printf("%04d", $zahl); // 00027
Durch 04 wird festgelegt, dass der Wert mindestens 4 Zeichen lang sein und als Füllzeichen die 0 verwendet werden soll.
Klar geht das auch bei Fließkomma-Werten:
$dezimal = 27.99;
printf("%07.2f", $dezimal); // 0027.99
Aber vorsicht: 7 legt die Gesamtzahl fest, d.h. der Punkt wird mitgerechnet!
Andere Füllzeichen sind möglich. Dazu muss das Füllzeichen mit '\ maskiert werden:
printf('%\'*5d', 10); // ***10
printf('%\'A10.2f', 1.1); // AAAAAA1.10
Füllzeichen sind sogar bei Strings möglich:
$str = FALCON;
printf("%09s", $str); // 000FALCON
Nun sind führende Nullen bei Strings nicht gerade üblich. Andere Zeichen wären nett.
Kein Problem: Wir setzen statt der 0 ein einfaches ' Zeichen und anschließend das gewünschte Füllzeichen:
$str = "FALCON";
printf("%'x9s", $str); // xxxFALCON
printf("%'*9s", $str); // ***FALCON
printf("%'_9s", $str); // ___FALCON
Maximale Länge festlegen
Wir können bei einem String auch die maximale Länge angeben. Alles was länger ist, wird gnadenlos abgeschnitten:
$str = "Hallo Welt, wie geht es Dir?";
printf("Die ersten drei Zeichen: %.3s", $str); // Hal
Vorzeichen anzeigen
Positive Zahlen werden ohne Vorzeichen angezeigt. Um das zu ändern, schreiben wir vor den Buchstaben d oder f ein + (Pluszeichen):
$positiv = 10;
printf("%+d", $positiv); // +10
Mehrere Argumente einsetzen
In unseren Beispielen haben wir printf() immer nur mit einem Wert formatiert. Hier ein Beispiel für mehrere:
$a = 7;
$b = "Octopussy";
printf("[Agent: %03d] [Auftrag: %s]", $a, $b);
// [Agent: 007] [Auftrag: Octopussy]
printf() funktioniert "Schritt für Schritt". Beim ersten %-Zeichen wird das erste Argument eingesetzt. Beim zweiten %-Zeichen das zweite Argument und so weiter.
sprintf() - formatierten String speichern
Mit printf() geben wir einen formatierten String einfach am Bildschirm aus. Wir können den String aber nicht speichern:
Um einen formatierten String zu speichern, müssen wir die Funktion sprintf() benutzen. Diese funktioniert wie printf(), gibt den formatierten String aber zurück, sodass wir ihn in einer Variable speichern können.
$a = 7;
$b = "Octopussy";
$save = sprintf("[Agent: %03d] [Auftrag: %s]", $a, $b);
echo $save;
Der formatierte String ist in der Variable $save gespeichert. echo $save gibt ganz korrekt Folgendes aus:
[Agent: 007] [Auftrag: Octopussy]
number_format() - Zahlen formatieren
Um Zahlen mit vielen Ziefern besser lesbar zu machen, ist es im Deutschen üblich, Tausender-Trennzeichen zu verwenden und die Zahlen vor dem Komma in Dreiergruppen zu gliedern. Außerdem verwendet man - im Unterschied zum Englischen - im Deutschen ein Komma als Trennzeichen für die Nachkommastellen.
- 149.504,15 €
- 12 742 km (Durchmesser der Erde)
Wie wir sehen, können der Punkt oder das Leerzeichen als Tausender-Trennzeichen verwendet werden.
Es wird aber empfohlen, den Punkt nur bei der Darstellung von Geldbeträgen zu verwenden - alle anderen Zahlen sollten mit Leerzeichen in Dreiergruppen gegliedert werden.
Mit der Funktion number_format() können wir beide Formatierungen sehr einfach erhalten:
$betrag = 149504.154;
echo number_format($betrag, 2, "," , ".");
// 149.504,15
$kontoNr = 123456789;
echo number_format($kontoNr, 0, "," , " ");
// 123 456 789
number_format() hat vier Parameter für:
- die zu formatierende Zahl
- Anzahl der Nachkommastellen
- Trennzeichen für die Nachkommastellen
- Tausendertrennzeichen
Übungen
einfach
Schau dir den Screenshot an. Die Punktezahl (roter Pfeil) wird mit einigen führenden Nullen mit 00012900 dargestellt.
Ergänze den folgenden PHP-Code und setze die Funktion printf() ein, um genau diese Formatierung am Bildschirm angezeigt zu bekommen:
$punkte = 12900;
// printf(...);
mittel
Du hast folgenden Code:
$lang = "de"; // oder "en"
$betrag = "1899.99";
Die Variable $lang kann den Wert de oder en haben. Je nach dem, welchen Wert sie hat, soll der Wert von $betrag entsprechend der landestypischen Formatierung am Bildschirm angezeigt werden.
- Im Deutschen: 1.899,99
- Im Englischen: 1,899.99
schwer
Definier zwei Variablen:
- $name für Deinen Namen
- $credits nimmt eine Zahl zwischen -99 und +99 auf
Erstelle einen formatierten String nach folgendem Muster:
Hallo R,
du hast +07 Credits
Das heißt:
- Nur der erste Buchstabe des Namens soll angezeigt werden
- Der Wert von $credits soll maximal zwei Ziffern lang sein und ggf. mit einer führenden Null angezeigt werden.
- Der Wert von $credits soll mit Vorzeichen angezeigt werden.
Der formatierte String soll gespeichert und anschließend mit echo am Bildschirm angezeigt werden.