Start · Sprachen · PHP · Referenz · money_format

money_format

Funktion

Formatiert eine Gleitkommazahl als Währungs-Zeichenkette gemäß dem aktuellen Locale.

seit PHP 4.3.0 Kategorie: string

Signatur

money_format(string $format, float $number): string

Beschreibung

money_format() wandelt eine Gleitkommazahl in eine locale-abhängige Währungsdarstellung um. Der Formatstring folgt der Konvention der C-Funktion strfmon() und erlaubt über Spezifikator-Sequenzen eine genaue Steuerung von Vorzeichen, Auffüllzeichen, Breite, Nachkommastellen und Währungssymbol.

Damit die Funktion korrekt arbeitet, muss zuvor mit setlocale() ein geeignetes Locale gesetzt werden (z. B. de_DE.UTF-8 für deutsches Währungsformat). Ohne gesetztes Locale entspricht die Ausgabe dem Standard-C-Locale, das kein Währungssymbol enthält.

Wichtig: money_format() wurde in PHP 7.4 als deprecated markiert und in PHP 8.0 vollständig entfernt. Als Ersatz empfiehlt die PHP-Dokumentation offiziell die Klasse NumberFormatter aus der Intl-Erweiterung.

  • %i – internationale Währungsdarstellung (z. B. EUR 1.234,56)
  • %n – nationale Währungsdarstellung (z. B. € 1.234,56)
  • Modifikatoren wie %=* (Füllzeichen), %- (linksbündig), %+ (Vorzeichendarstellung) sind kombinierbar.

Parameter

Name Typ Default Beschreibung
$format Pflicht string Formatstring im strfmon()-Stil. Enthält mindestens einen Währungs-Konversionsspezifikator (%i für international, %n für national). Alle anderen Zeichen werden unverändert in die Ausgabe übernommen.
$number Pflicht float Der zu formatierende numerische Wert als Gleitkommazahl.

Rückgabewert

Typ
string
Beschreibung
Gibt die formatierte Währungs-Zeichenkette zurück. Wenn number kein gültiger Zahlwert ist oder der Formatstring ungültig ist, kann eine leere Zeichenkette oder false zurückgegeben werden.

Beispiele

Nationale Währungsformatierung mit deutschem Locale

<?php
// Locale auf Deutsch (Deutschland) setzen
setlocale(LC_MONETARY, 'de_DE.UTF-8');

$betrag = 1234.56;

// Nationale Darstellung
echo money_format('%n', $betrag) . PHP_EOL;

// Internationale Darstellung
echo money_format('%i', $betrag) . PHP_EOL;

// Mit Text drumherum
echo money_format('Gesamtbetrag: %n EUR', $betrag) . PHP_EOL;
1.234,56 € EUR 1.234,56 Gesamtbetrag: 1.234,56 € EUR

Moderner Ersatz mit NumberFormatter (PHP 7.4+ / 8.0+)

<?php
// Empfohlener Ersatz für money_format() ab PHP 7.4 / 8.0
$betrag = 1234.56;

$formatter = new NumberFormatter('de_DE', NumberFormatter::CURRENCY);

// Mit Währungscode formatieren
echo $formatter->formatCurrency($betrag, 'EUR') . PHP_EOL;

// US-Dollar
$formatterUS = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $formatterUS->formatCurrency($betrag, 'USD') . PHP_EOL;
1.234,56 € $1,234.56

// Wichtig · Fallstricke

Deprecation / Entfernung: money_format() ist seit PHP 7.4.0 als veraltet (deprecated) eingestuft und wurde in PHP 8.0.0 vollständig entfernt. Neuer Code sollte ausschließlich NumberFormatter::formatCurrency() aus der intl-Erweiterung verwenden.

Plattformabhängigkeit: Die Funktion war auf Systemen, die keine strfmon()-Implementierung besitzen (z. B. Windows), nicht verfügbar und konnte dort gar nicht genutzt werden.

Locale-Abhängigkeit: Das Ergebnis hängt vollständig vom gesetzten Locale ab. Ein nicht korrekt gesetztes Locale führt zu unerwarteten oder leeren Ausgaben. Das Locale muss auf dem Betriebssystem installiert sein.