W3docs

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 wie sprintf(). 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

SpezifiziererBedeutungBeispielausgabe (en_US, 1234.56)
%nNationales (lokales) Währungsformat$1,234.56
%iInternationales WährungsformatUSD 1,234.56
%.2nNationales Format, 2 Dezimalstellen$1,234.56
%(nNegative Beträge in Klammern einschließen($1,234.56)
%!nWährungssymbol unterdrücken1,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.56

Achtung: 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.56

Um 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 von money_format() und anderen Locale-sensitiven Funktionen verwendete Locale setzen.
  • sprintf() / printf() – allgemeine String-Formatierung.
  • round() – einen Wert runden, bevor er als Geldbetrag formatiert wird.

Übungen

Übung
Was macht die Funktion 'money_format' in PHP?
Was macht die Funktion 'money_format' in PHP?
Was this page helpful?