W3docs

money_format()

Notre article présente la fonction PHP money_format(), utilisée pour formater un nombre en chaîne monétaire selon la locale active.

La fonction money_format() formate un nombre en chaîne monétaire, en appliquant un séparateur de milliers, un séparateur décimal et un symbole monétaire conformément à la locale active.

Important : money_format() est dépréciée depuis PHP 7.4 et supprimée dans PHP 8.0. Elle n'a également jamais existé sous Windows. Si vous écrivez du nouveau code, passez directement à la section Remplacement moderne ci-dessous — le reste de cette page documente la fonction historique afin que vous puissiez lire et maintenir du code PHP plus ancien.

Syntaxe

string money_format ( string $format , float $number )

La fonction accepte deux paramètres :

  • $format – une chaîne décrivant comment formater le nombre. Elle contient une ou plusieurs spécifications de conversion (chacune commençant par %), à l'instar de sprintf(). Tout texte hors d'une spécification est affiché tel quel.
  • $number – la valeur numérique à formater.

Elle retourne la chaîne formatée.

Spécificateurs de format courants

SpécificateurSignificationExemple de sortie (en_US, 1234.56)
%nFormat monétaire national (local)$1,234.56
%iFormat monétaire internationalUSD 1,234.56
%.2nFormat national, 2 décimales$1,234.56
%(nMontants négatifs entre parenthèses($1,234.56)
%!nSupprime le symbole monétaire1,234.56

La locale (définie avec setlocale()) détermine le symbole monétaire, le caractère de groupement et le séparateur décimal utilisés.

Exemple

<?php
$number = 1234.56;
setlocale(LC_MONETARY, 'en_US');
echo money_format('%n', $number);
?>

Ici $number contient une valeur en virgule flottante, et l'appel à setlocale() configure la locale monétaire sur en_US. La sortie est :

$1,234.56

Attention : setlocale() retourne false si la locale demandée n'est pas installée sur le serveur, et money_format() revient alors silencieusement à une valeur par défaut. Vérifiez toujours que le nom de la locale (par exemple en_US ou en_US.UTF-8) existe bien sur votre système.

Remplacement moderne : NumberFormatter

Étant donné que money_format() a disparu dans PHP 8, l'approche recommandée est la classe NumberFormatter de l'extension intl. Elle est sensible à la locale, fonctionne sur toutes les plateformes (y compris Windows) et utilise les données ICU plutôt que la locale système :

<?php
$number = 1234.56;

$formatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency($number, 'USD');
?>

Sortie :

$1,234.56

Pour formater le même montant pour une locale et une devise différentes, il suffit de modifier la locale passée au constructeur et le code devise :

<?php
$number = 1234.56;

$de = new NumberFormatter('de_DE', NumberFormatter::CURRENCY);
echo $de->formatCurrency($number, 'EUR');
?>

Sortie (le groupement allemand utilise un point pour les milliers et une virgule pour les décimales) :

1.234,56 €

Quand utiliser quoi

  • Nouveau code : utilisez NumberFormatter::formatCurrency() — c'est le seul formateur monétaire disponible en PHP 8+.
  • Code existant sous PHP 7.4 ou antérieur : money_format() fonctionne encore mais émettra un avertissement de dépréciation ; prévoyez une migration.
  • Nombres simples sans devise : si vous n'avez besoin que d'un séparateur de milliers et de décimales fixes (sans symbole monétaire ni règles de locale), number_format() est plus léger.

Fonctions associées

  • number_format() – formate un nombre avec regroupement des milliers.
  • setlocale() – définit la locale utilisée par money_format() et d'autres fonctions sensibles à la locale.
  • sprintf() / printf() – formatage de chaînes généraliste.
  • round() – arrondit une valeur avant de la formater en montant.

Pratique

Pratique
Que fait la fonction 'money_format' en PHP ?
Que fait la fonction 'money_format' en PHP ?
Was this page helpful?