Lorsque l'on écrit un nombre, on le fait différement suivant le pays concerné. Par exemple, un nombre représentant une valeur monétaire liée à l'Euro ne s'écrira pas de la même façon si c'était une valeur en Dollar. JavaScript permet nativement de jouer avec le format des nombres en fonction de la langue utilisée.

Il y a finalement plusieurs méthodes pour y parvenir en JavaScript. La première consiste à utiliser l'objet natif Intl et sa méthode NumberFormat. Elle est compatible sur tous les navigateurs :

Essayons ce bout de code :

let locale = navigator.language; // fr-FR
const number = 32485.24;
console.log('Par défaut : '+number);

numberFormatted = new Intl.NumberFormat(locale).format(number);
console.log(locale+' : '+numberFormatted);

Il affiche :

Par défaut : 32485.24
fr-FR : 32 485,24

Voyons maintenant en changeant la locale :

let locale = 'en-US';
const number = 32485.24;
console.log('Par défaut : '+number);

numberFormatted = new Intl.NumberFormat(locale).format(number);
console.log(locale+' : '+numberFormatted);

Le retour est :

Par défaut : 32485.24
en-US : 32,485.24

Intl peut prendre des options afin notamment de préciser si c'est une valeur monétaire :

let locale = 'en-US';
const number = 32485.24;
console.log('Par défaut : '+number);

numberFormatted = new Intl.NumberFormat(locale, { style: 'currency', currency: 'USD').format(number);
console.log(locale+' : '+numberFormatted);
Par défaut : 32485.24
en-US : $32,485.24

N'hésitez pas à consulter la liste des options disponibles et également la documentation de Intl.NumberFormat.

Comme je le disais au début de l'article, il y a plusieurs méthodes pour "traduire" des nombres en JavaScript. L'autre méthode consiste à utiliser toLocaleString() (doc) :

let locale = navigator.language; // fr-FR

const number = 32485.24;
console.log('Par défaut : '+number);

numberFormatted = number.toLocaleString();
console.log(locale+' : '+numberFormatted);

Résultat :

Par défaut : 32485.24
fr-FR : 32 485,24

Par défaut, la locale utilisée est celle du navigateur. On peut forcer une locale en la passant en paramètre :

const number = 32485.24;
console.log('Par défaut : '+number);

locale = 'en-US';
numberFormatted = number.toLocaleString(locale);
console.log(locale+' : '+numberFormatted);

Produit :

Par défaut : 32485.24
en-US : 32,485.24

Comme avec Intl.NumberFormat, vous pouvez passer des options pour formatter le nombre :

const number = 32485.24;
console.log('Par défaut : '+number);

locale = 'en-US';
numberFormatted = number.toLocaleString(locale, { style: 'currency', currency: 'USD' });
console.log(locale+' : '+numberFormatted);

Le nombre est correctement formaté :

Par défaut : 32485.24
en-US : $32,485.24

JavaScript permet donc de formater des nombres très facilement, sans avoir besoin d'utiliser de bibliothèque externe !