W3docs

money_format()

Articolo sulla funzione PHP money_format(), usata per formattare un numero come stringa valutaria. Utile per lavorare con i numeri in PHP.

La funzione money_format() formatta un numero come stringa valutaria, applicando un separatore delle migliaia, un punto decimale e un simbolo di valuta in base al locale attivo.

Importante: money_format() è deprecata a partire da PHP 7.4 e rimossa in PHP 8.0. Inoltre non è mai esistita su Windows. Se stai scrivendo nuovo codice, vai direttamente alla sezione Sostituzione moderna qui sotto — il resto di questa pagina documenta la funzione legacy per permetterti di leggere e manutenere codice PHP precedente.

Sintassi

string money_format ( string $format , float $number )

La funzione accetta due parametri:

  • $format – una stringa che descrive come formattare il numero. Contiene una o più specifiche di conversione (ciascuna che inizia con %), in modo simile a sprintf(). Qualsiasi testo al di fuori di una specifica viene stampato letteralmente.
  • $number – il valore numerico da formattare.

Restituisce la stringa formattata.

Specificatori di formato comuni

SpecificatoreSignificatoOutput di esempio (en_US, 1234.56)
%nFormato valutario nazionale (locale)$1,234.56
%iFormato valutario internazionaleUSD 1,234.56
%.2nFormato nazionale, 2 cifre decimali$1,234.56
%(nRacchiude i valori negativi tra parentesi($1,234.56)
%!nSopprime il simbolo di valuta1,234.56

Il locale (impostato con setlocale()) determina quale simbolo di valuta, carattere di raggruppamento e punto decimale vengono utilizzati.

Esempio

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

Qui $number contiene un valore in virgola mobile e la chiamata setlocale() configura il locale monetario su en_US. L'output è:

$1,234.56

Attenzione: setlocale() restituisce false se il locale richiesto non è installato sul server, e in tal caso money_format() ricade silenziosamente su un valore predefinito. Verifica sempre che il nome del locale (ad esempio en_US oppure en_US.UTF-8) esista effettivamente nel tuo sistema.

Sostituzione moderna: NumberFormatter

Poiché money_format() è stata rimossa in PHP 8, l'approccio consigliato è la classe NumberFormatter dell'estensione intl. È consapevole del locale, funziona su tutte le piattaforme (incluso Windows) e utilizza i dati ICU anziché il locale di sistema:

<?php
$number = 1234.56;

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

Output:

$1,234.56

Per formattare lo stesso importo con un locale e una valuta diversi, basta cambiare il locale nel costruttore e il codice valuta:

<?php
$number = 1234.56;

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

Output (il raggruppamento tedesco usa il punto per le migliaia e la virgola per i decimali):

1.234,56 €

Quando usare cosa

  • Nuovo codice: usa NumberFormatter::formatCurrency() — è l'unico formattatore valutario disponibile in PHP 8+.
  • Codice legacy su PHP 7.4 o precedente: money_format() funziona ancora ma emetterà un avviso di deprecazione; pianifica la migrazione.
  • Numeri semplici senza valuta: se hai bisogno solo di un separatore delle migliaia e decimali fissi (senza simbolo di valuta o regole di locale), number_format() è più leggera.

Funzioni correlate

  • number_format() – formatta un numero con migliaia raggruppate.
  • setlocale() – imposta il locale usato da money_format() e da altre funzioni sensibili al locale.
  • sprintf() / printf() – formattazione generica delle stringhe.
  • round() – arrotonda un valore prima di formattarlo come importo monetario.

Pratica

Pratica
Cosa fa la funzione 'money_format' in PHP?
Cosa fa la funzione 'money_format' in PHP?
Was this page helpful?