Intl.NumberFormat în JavaScript

Formatare regională (Intl) Toate browserele moderne (formatRange: ES2023)

Formatează numere după regulile unei limbi: monedă, procente, unități, forme compacte (1,2 mil.).

Sintaxă
const f = new Intl.NumberFormat("ro-RO", optiuni);
f.format(numar)
f.formatToParts(numar)
f.formatRange(de_la, pana_la)

Ce face Intl.NumberFormat

Opțiunile principale: style ("decimal", "currency", "percent", "unit"), currency ("RON", "EUR"), unit ("kilogram", "kilometer-per-hour"), minimumFractionDigits/maximumFractionDigits, notation: "compact" și signDisplay.

format returnează textul, formatToParts bucățile lui (întreg, separator, fracție, monedă), iar formatRange un interval (100 - 250 RON). format acceptă și BigInt. resolvedOptions și supportedLocalesOf funcționează ca la celelalte formatoare Intl.

Parametri

Parametru Descriere
limba Opțional. Codul limbii, de exemplu "ro-RO".
optiuni Opțional. Stilul, moneda, unitatea, numărul de zecimale, notația.

Ce returnează

Un obiect formator.

Exemple

Exemplul 1: Monedă, procente, unități, compact

const lei = new Intl.NumberFormat("ro-RO", { style: "currency", currency: "RON" });
const euro = new Intl.NumberFormat("ro-RO", { style: "currency", currency: "EUR" });
const compact = new Intl.NumberFormat("ro-RO", { notation: "compact" });

console.log(lei.format(1234.5), euro.format(99));
console.log(new Intl.NumberFormat("ro-RO", { style: "percent", maximumFractionDigits: 1 }).format(0.1875));
console.log(new Intl.NumberFormat("ro-RO", { style: "unit", unit: "kilogram" }).format(2.5));
console.log(compact.format(1250000), compact.format(15300));
console.log(new Intl.NumberFormat("ro-RO", { signDisplay: "always" }).format(5));

Rezultat

1.234,50 RON 99,00 EUR
18,8 %
2,5 kg
1,3 mil. 15 K
+5

Exemplul 2: Intervale și bucăți

const lei = new Intl.NumberFormat("ro-RO", { style: "currency", currency: "RON", maximumFractionDigits: 0 });

console.log(lei.formatRange(100, 250));
console.log(lei.formatToParts(1500).map((p) => `${p.type}:${p.value}`).join(" | "));
console.log(lei.formatRangeToParts(1, 2).length, lei.resolvedOptions().currency);
console.log(new Intl.NumberFormat("ro-RO").format(12345678901234567890n));
console.log(Intl.NumberFormat.supportedLocalesOf(["ro-RO", "en"]));

Rezultat

100 - 250 RON
integer:1 | group:. | integer:500 | literal:  | currency:RON
5 RON
12.345.678.901.234.567.890
[ 'ro-RO', 'en' ]

Greșeli frecvente

  • Faci calcule cu textul formatat. Formatează doar la afișare; păstrează valorile ca numere.
  • Uiți opțiunea currency când folosești style: "currency" și primești TypeError.

Comenzi înrudite

  • Number.prototype.toLocaleString: Formatează un număr după obiceiurile unei țări: separatori, monedă, procente, unități.
  • toFixed: Formatează un număr cu un număr fix de zecimale. Returnează text.
  • Intl.PluralRules: Spune ce formă de plural cere un număr într-o limbă: „1 produs”, „2 produse”, „20 de produse”.