La méthode Number.prototype.toLocaleString([locales [, options]]) retourne une chaîne représentant le nombre dans le format linguistique spécifié. Les paramètres optionnels locales et options permettent de personnaliser la localsiation et le style du formatage.
Exemples de base
// Définition d'une valeur numérique
const valeur = 987654321;
// Formatage avec locale par défaut
const defaut = valeur.toLocaleString();
console.log(defaut); // "987,654,321"
// Formatage décimal avec locale française
const decimalFr = valeur.toLocaleString('fr-FR', { style: 'decimal' });
console.log(decimalFr); // "987 654 321"
// Formatage en pourcentage
const pourcentage = valeur.toLocaleString('fr-FR', { style: 'percent' });
console.log(pourcentage); // "98 765 432 100 %"
// Formatage en devise (euro)
const deviseEuro = valeur.toLocaleString('fr-FR', { style: 'currency', currency: 'EUR' });
console.log(deviseEuro); // "987 654 321,00 €"
// Désactiver les séparateurs de groupes
const sansSeparateurs = valeur.toLocaleString('fr-FR', { useGrouping: false, style: 'currency', currency: 'EUR' });
console.log(sansSeparateurs); // "987654321,00 €"
// Formatage avec chiffres chinois
const chiffresChinois = valeur.toLocaleString('zh-Hans-CN-u-nu-hanidec', { useGrouping: false });
console.log(chiffresChinois); // "九八七六五四三二一"
Options avancées
Les options supplémentaires contrôlent la précision numérique :
minimumIntegerDigits: nombre minimum de chiffres entiers (1 à 21, par défaut 1).minimumFractionDigits: nombre minimum de décimales (0 à 20, par défaut 0 pour les nombres).maximumFractionDigits: nombre maximum de décimales (0 à 20, par défaut 3 pour les nombres).minimumSignificantDigits: nombre minimum de chiffres significatifs (1 à 21, par défaut 1).maximumSignificantDigits: nombre maximum de chiffres significatifs (1 à 21, par défaut 21).
Adaptation aux locales internationales
const montant = 765432.198;
// Formatage allemand (point comme séparateur de milliers, virgule pour les décimales)
const allemand = montant.toLocaleString('de-DE');
console.log(allemand); // "765.432,198"
// Formatage arabe avec chiffres arabes
const arabe = montant.toLocaleString('ar-EG');
console.log(arabe); // "٧٦٥٬٤٣٢٫١٩٨"
// Formatage indien avec séparation en lakhs et crores
const indien = montant.toLocaleString('en-IN');
console.log(indien); // "7,65,432.198"
// Locale de secours : balinais avec fallback indonésien
const secours = montant.toLocaleString(['ban', 'id']);
console.log(secours); // "765.432,198"
// Formatage monétaire pour le yen japonais (pas de décimales)
const yen = montant.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' });
console.log(yen); // "¥765,432"
// Limitation à trois chiffres significatifs
const precision = montant.toLocaleString('en-IN', { maximumSignificantDigits: 3 });
console.log(precision); // "7,65,000"