JavaScriptNombres et Math

Number.prototype.toLocaleString()

Formate un nombre selon les habitudes de la langue choisie : séparateurs de milliers, virgule, devises et pourcentages.

Renvoie
Une chaîne de caractères avec le nombre formaté selon les règles de la langue choisie.
Sur cette page

Exemple

#
JavaScript
const score = 1234567.891

console.log(score.toLocaleString('fr-FR'))
console.log(score.toLocaleString('en-US'))
console.log((0.25).toLocaleString('fr-FR', { style: 'percent' }))
Console
1 234 567,891
1,234,567.891
25 %

Définition et utilisation

#

La méthode toLocaleString() convertit un nombre en texte écrit comme on le fait dans une langue et un pays donnés. Pour "fr-FR", la partie décimale est séparée par une virgule et les milliers par une espace, donc 12345.6 devient « 12 345,6 ». Pour "en-US", le même nombre devient « 12,345.6 », et pour "de-DE", « 12.345,6 ».

Le deuxième argument est un objet d’options, le même que pour Intl.NumberFormat. style: "currency" avec currency: "EUR" formate des montants, style: "percent" transforme 0.25 en « 25 % », et minimumFractionDigits et maximumFractionDigits fixent le nombre de décimales.

En coulisses, la méthode crée à chaque fois un formateur Intl.NumberFormat. Cela n’a pas d’importance pour un seul nombre, mais si vous formatez des centaines de valeurs, par exemple dans un tableau de résultats, créez le formateur une seule fois et appelez sa méthode format(). Indiquez toujours un code de langue, car sans lui, le résultat dépend des réglages du navigateur de l’utilisateur.

Syntaxe

#
Syntaxe
number.toLocaleString()
number.toLocaleString(locales)
number.toLocaleString(locales, options)

Paramètres

#
  • locales

    chaîne ou tableau, optionnel

    Un code de langue, par exemple "fr-FR", "en-US" ou "de-DE". Omis, il correspond à la langue du navigateur.
  • options

    objet, optionnel

    Des réglages comme dans Intl.NumberFormat, notamment style, currency, minimumFractionDigits et maximumFractionDigits.

Plus d’exemples

#
Montants en euros
JavaScript
const prices = [49, 1299.5, 15000]

for (const price of prices) {
  console.log(price.toLocaleString('fr-FR', { style: 'currency', currency: 'EUR' }))
}
Console
49,00 €
1 299,50 €
15 000,00 €

En notation française, les milliers sont séparés par une espace fine insécable, même pour un nombre à quatre chiffres comme « 1 299,50 € », et une espace insécable normale précède le symbole de la devise pour que le montant ne soit jamais coupé en fin de ligne.

Décimales et toFixed()
JavaScript
const average = 4.5

console.log(average.toLocaleString('fr-FR', { minimumFractionDigits: 2 }))
console.log((3.14159).toLocaleString('fr-FR', { maximumFractionDigits: 2 }))
console.log(average.toFixed(2))
Console
4,50
3,14
4.50
Un seul formateur pour plusieurs nombres
JavaScript
const format = new Intl.NumberFormat('fr-FR', { maximumFractionDigits: 1 })
const results = [81.66, 95, 70.25]

console.log(results.map((value) => format.format(value)))
Console
['81,7', '95', '70,3']

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Le résultat est du texte destiné à l’affichage. Ne vous en servez pas pour des calculs et ne l’enregistrez pas dans une base de données : conservez le nombre brut, et formatez-le seulement au moment de l’afficher.
  • Le séparateur des milliers en notation française est une espace fine insécable (\u202f), pas une espace normale. Si vous comparez le résultat dans des tests, tenez compte de ce caractère.
  • L’option maximumFractionDigits arrondit le nombre seulement pour l’affichage, la valeur elle-même ne change pas. Contrairement à toFixed(), vous obtenez en plus la virgule décimale française.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.