JavaScriptLiczby i Math

Number.prototype.toLocaleString()

Formatuje liczbę według zwyczajów wybranego języka: separatory tysięcy, przecinek, waluty i procenty.

Zwraca
Napis z liczbą sformatowaną według zasad wybranego języka.
Na tej stronie

Przykład

#
JavaScript
const score = 1234567.891

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

Definicja i zastosowanie

#

Metoda toLocaleString() zamienia liczbę na tekst zapisany tak, jak przyjęło się w danym języku i kraju. Dla "pl-PL" część dziesiętną oddziela przecinek, a tysiące spacja, więc 12345.6 stanie się „12 345,6”. Dla "en-US" ta sama liczba to „12,345.6”, a dla "de-DE" „12.345,6”.

Drugi argument to obiekt opcji, taki sam jak w Intl.NumberFormat. style: "currency" razem z currency: "PLN" formatuje kwoty, style: "percent" zamienia 0.25 na „25%”, a minimumFractionDigits i maximumFractionDigits ustalają liczbę miejsc po przecinku.

Pod spodem metoda za każdym razem korzysta z formatera Intl.NumberFormat. Przy pojedynczych liczbach nie ma to znaczenia, ale formatując setki wartości, np. w tabeli wyników, utwórz formater raz i wywołuj jego metodę format(). Zawsze podawaj kod języka, bo bez niego wynik zależy od ustawień przeglądarki użytkownika.

Składnia

#
Składnia
number.toLocaleString()
number.toLocaleString(locales)
number.toLocaleString(locales, options)

Parametry

#
  • locales

    napis lub tablica, opcjonalny

    Kod języka, np. "pl-PL", "en-US" albo "de-DE". Pominięty oznacza język przeglądarki.
  • options

    obiekt, opcjonalny

    Ustawienia jak w Intl.NumberFormat, m.in. style, currency, minimumFractionDigits i maximumFractionDigits.

Więcej przykładów

#
Kwoty w złotych
JavaScript
const prices = [49, 1299.5, 15000]

for (const price of prices) {
  console.log(price.toLocaleString('pl-PL', { style: 'currency', currency: 'PLN' }))
}
Konsola
49,00 zł
1299,50 zł
15 000,00 zł

W polskim zapisie liczby czterocyfrowe nie dostają separatora tysięcy, dlatego „1299,50 zł” jest zapisane bez spacji, a „15 000,00 zł” już z nią.

Miejsca po przecinku a toFixed()
JavaScript
const average = 4.5

console.log(average.toLocaleString('pl-PL', { minimumFractionDigits: 2 }))
console.log((3.14159).toLocaleString('pl-PL', { maximumFractionDigits: 2 }))
console.log(average.toFixed(2))
Konsola
4,50
3,14
4.50
Jeden formater dla wielu liczb
JavaScript
const format = new Intl.NumberFormat('pl-PL', { maximumFractionDigits: 1 })
const results = [81.66, 95, 70.25]

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

Obsługa przeglądarek

#

Szeroko dostępne

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • Wynik to tekst do wyświetlania. Nie licz na nim i nie zapisuj go w bazie: przechowuj surową liczbę, a formatuj ją dopiero przy pokazywaniu.
  • Separatorem tysięcy w polskim zapisie jest spacja niełamiąca (\u00a0), a nie zwykła. Porównując wynik w testach, uwzględnij ten znak.
  • Opcja maximumFractionDigits zaokrągla liczbę tylko na potrzeby wyświetlenia, sama wartość się nie zmienia. W przeciwieństwie do toFixed() dostajesz przy tym polski przecinek.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.