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.
Exemple
#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' }))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
#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 dansIntl.NumberFormat, notammentstyle,currency,minimumFractionDigitsetmaximumFractionDigits.
Plus d’exemples
#const prices = [49, 1299.5, 15000]
for (const price of prices) {
console.log(price.toLocaleString('fr-FR', { style: 'currency', currency: 'EUR' }))
}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.
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))const format = new Intl.NumberFormat('fr-FR', { maximumFractionDigits: 1 })
const results = [81.66, 95, 70.25]
console.log(results.map((value) => format.format(value)))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
maximumFractionDigitsarrondit 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
#- Intl.NumberFormatFormate des nombres selon les règles d’une langue donnée : séparateurs, devises, pourcentages et unités.
- Number.prototype.toFixed()Convertit un nombre en chaîne de caractères avec un nombre donné de décimales.
- Number.prototype.toString()Convertit un nombre en chaîne de caractères, y compris dans un autre système de numération, comme le binaire ou l’hexadécimal.
- Math.round()Arrondit un nombre à l’entier le plus proche.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.