money_format()
Unser Artikel erklärt die PHP-Funktion money_format(), die eine Zahl als Währungsstring formatiert. Nützlich für die Arbeit mit Geldbeträgen.
Die Funktion money_format() formatiert eine Zahl als Währungsstring und wendet dabei ein Tausendertrennzeichen, ein Dezimalzeichen sowie ein Währungssymbol gemäß der aktiven Locale an.
Wichtig: money_format() ist ab PHP 7.4 veraltet und wurde in PHP 8.0 entfernt. Außerdem war sie unter Windows nie verfügbar. Wenn Sie neuen Code schreiben, springen Sie direkt zum Abschnitt Moderner Ersatz weiter unten — der restliche Teil dieser Seite dokumentiert die veraltete Funktion, damit Sie älteren PHP-Code lesen und pflegen können.
Syntax
string money_format ( string $format , float $number )Die Funktion nimmt zwei Parameter entgegen:
$format– ein String, der beschreibt, wie die Zahl formatiert werden soll. Er enthält eine oder mehrere Konvertierungsspezifikationen (jede beginnt mit%), ähnlich wiesprintf(). Text außerhalb einer Spezifikation wird unverändert ausgegeben.$number– der numerische Wert, der formatiert werden soll.
Die Funktion gibt den formatierten String zurück.
Häufige Formatspezifizierer
| Spezifizierer | Bedeutung | Beispielausgabe (en_US, 1234.56) |
|---|---|---|
%n | Nationales (lokales) Währungsformat | $1,234.56 |
%i | Internationales Währungsformat | USD 1,234.56 |
%.2n | Nationales Format, 2 Dezimalstellen | $1,234.56 |
%(n | Negative Beträge in Klammern einschließen | ($1,234.56) |
%!n | Währungssymbol unterdrücken | 1,234.56 |
Die Locale (gesetzt mit setlocale()) bestimmt, welches Währungssymbol, Gruppierungszeichen und Dezimalzeichen verwendet werden.
Beispiel
<?php
$number = 1234.56;
setlocale(LC_MONETARY, 'en_US');
echo money_format('%n', $number);
?>Hier enthält $number einen Gleitkommawert, und der Aufruf von setlocale() konfiguriert die monetäre Locale auf en_US. Die Ausgabe lautet:
$1,234.56Achtung: setlocale() gibt false zurück, wenn die angeforderte Locale nicht auf dem Server installiert ist, und money_format() greift dann stillschweigend auf einen Standardwert zurück. Überprüfen Sie immer, ob der Locale-Name (z. B. en_US vs. en_US.UTF-8) tatsächlich auf Ihrem System vorhanden ist.
Moderner Ersatz: NumberFormatter
Da money_format() in PHP 8 nicht mehr existiert, ist die empfohlene Vorgehensweise die Klasse NumberFormatter aus der Erweiterung intl. Sie ist Locale-fähig, funktioniert auf jeder Plattform (einschließlich Windows) und verwendet ICU-Daten anstelle der System-Locale:
<?php
$number = 1234.56;
$formatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency($number, 'USD');
?>Ausgabe:
$1,234.56Um denselben Betrag für eine andere Locale und Währung zu formatieren, ändern Sie einfach die Locale im Konstruktor und den Währungscode:
<?php
$number = 1234.56;
$de = new NumberFormatter('de_DE', NumberFormatter::CURRENCY);
echo $de->formatCurrency($number, 'EUR');
?>Ausgabe (Deutsche Gruppierung verwendet einen Punkt für Tausender und ein Komma für Dezimalstellen):
1.234,56 €Wann was verwenden
- Neuer Code: Verwenden Sie
NumberFormatter::formatCurrency()— es ist der einzige Währungsformatierer, der in PHP 8+ verfügbar ist. - Legacy-Code mit PHP 7.4 oder früher:
money_format()funktioniert noch, gibt jedoch einen Deprecation-Hinweis aus; planen Sie eine Migration. - Einfache, nicht-monetäre Zahlen: Wenn Sie nur ein Tausendertrennzeichen und feste Dezimalstellen benötigen (kein Währungssymbol oder Locale-Regeln), ist
number_format()leichtgewichtiger.
Verwandte Funktionen
number_format()– Zahl mit gruppierten Tausendern formatieren.setlocale()– die vonmoney_format()und anderen Locale-sensitiven Funktionen verwendete Locale setzen.sprintf()/printf()– allgemeine String-Formatierung.round()– einen Wert runden, bevor er als Geldbetrag formatiert wird.