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 asprintf(). 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
| Specificatore | Significato | Output di esempio (en_US, 1234.56) |
|---|---|---|
%n | Formato valutario nazionale (locale) | $1,234.56 |
%i | Formato valutario internazionale | USD 1,234.56 |
%.2n | Formato nazionale, 2 cifre decimali | $1,234.56 |
%(n | Racchiude i valori negativi tra parentesi | ($1,234.56) |
%!n | Sopprime il simbolo di valuta | 1,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.56Attenzione: 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.56Per 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 damoney_format()e da altre funzioni sensibili al locale.sprintf()/printf()– formattazione generica delle stringhe.round()– arrotonda un valore prima di formattarlo come importo monetario.