Number.prototype.toLocaleString()
Базовая широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2017 года.
Метод toLocaleString() объекта Number возвращает строку с представлением числа, соответствующим языковым соглашениям. В реализациях с поддержкой Intl.NumberFormat API этот метод делегирует вызов Intl.NumberFormat.
Каждый раз, когда вызывается toLocaleString, приходится выполнять поиск в большой базе данных строк локализации, что потенциально неэффективно. Когда метод вызывается многократно с одинаковыми аргументами, лучше создать объект Intl.NumberFormat и использовать его метод format(), поскольку объект NumberFormat запоминает переданные ему аргументы и может решить кэшировать часть базы данных, чтобы последующие вызовы format могли искать строки локализации в более ограниченном контексте.
Попробуйте
function eArabic(x) {
return x.toLocaleString("ar-EG");
}
console.log(eArabic(123456.789));
// Expected output: "١٢٣٬٤٥٦٫٧٨٩"
console.log(eArabic("123456.789"));
// Expected output: "123456.789"
console.log(eArabic(NaN));
// Expected output: "ليس رقم"
Синтаксис
toLocaleString() toLocaleString(locales) toLocaleString(locales, options)
Параметры
Параметры locales и options настраивают поведение функции и позволяют приложениям указывать язык, соглашения форматирования которого следует использовать.
В реализациях, поддерживающих Intl.NumberFormat API, эти параметры точно соответствуют параметрам конструктора Intl.NumberFormat(). Реализациям без поддержки Intl.NumberFormat предписывается игнорировать оба параметра, делая используемую локаль и форму возвращаемой строки полностью зависимыми от реализации.
-
localesНеобязательный -
Строка с теги языка BCP 47 или массив таких строк. Соответствует параметру
localesконструктораIntl.NumberFormat().В реализациях без поддержки
Intl.NumberFormatэтот параметр игнорируется, и обычно используется локаль хоста. -
optionsНеобязательный -
Объект, настраивающий формат вывода. Соответствует параметру
optionsконструктораIntl.NumberFormat().В реализациях без поддержки
Intl.NumberFormatэтот параметр игнорируется.
Подробности об этих параметрах и способах их использования см. в конструкторе Intl.NumberFormat().
Возвращаемое значение
Строка, представляющая данное число в соответствии с языковыми соглашениями.
В реализациях с Intl.NumberFormat это эквивалентно new Intl.NumberFormat(locales, options).format(number).
Примечание: В большинстве случаев форматирование, возвращаемое toLocaleString(), является согласованным. Однако вывод может отличаться между реализациями, даже в пределах одной локали — вариации вывода предусмотрены и допустимы спецификацией. Он также может быть не таким, как вы ожидаете. Например, строка может использовать неразрывные пробелы или быть окружена двунаправленными управляющими символами. Вам не следует сравнивать результаты toLocaleString() с жестко заданными константами.
Примеры
Использование toLocaleString()
Базовое использование этого метода без указания locale возвращает форматированную строку в локали по умолчанию и с параметрами по умолчанию.
const number = 3500; console.log(number.toLocaleString()); // "3,500" if in U.S. English locale
Проверка поддержки параметров locales и options
Параметры locales и options могут поддерживаться не во всех реализациях, поскольку поддержка API интернационализации является необязательной, и некоторые системы могут не иметь необходимых данных. Для реализаций без поддержки интернационализации toLocaleString() всегда использует локаль системы, которая может быть не тем, что вам нужно. Поскольку любая реализация, поддерживающая параметры locales и options, должна поддерживать Intl API, вы можете проверить наличие последнего для поддержки:
function toLocaleStringSupportsLocales() {
return (
typeof Intl === "object" &&
!!Intl &&
typeof Intl.NumberFormat === "function"
);
}
Использование locales
Этот пример показывает некоторые вариации локализованных числовых форматов. Чтобы получить формат языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, некоторые запасные языки) с помощью аргумента locales:
const number = 123456.789;
// German uses comma as decimal separator and period for thousands
console.log(number.toLocaleString("de-DE"));
// 123.456,789
// Arabic in most Arabic speaking countries uses Eastern Arabic digits
console.log(number.toLocaleString("ar-EG"));
// ١٢٣٤٥٦٫٧٨٩
// India uses thousands/lakh/crore separators
console.log(number.toLocaleString("en-IN"));
// 1,23,456.789
// the nu extension key requests a numbering system, e.g. Chinese decimal
console.log(number.toLocaleString("zh-Hans-CN-u-nu-hanidec"));
// 一二三,四五六.七八九
// when requesting a language that may not be supported, such as
// Balinese, include a fallback language, in this case Indonesian
console.log(number.toLocaleString(["ban", "id"]));
// 123.456,789
Использование options
Результаты, предоставляемые toLocaleString(), можно настроить с помощью параметра options:
const number = 123456.789;
// request a currency format
console.log(
number.toLocaleString("de-DE", { style: "currency", currency: "EUR" }),
);
// 123.456,79 €
// the Japanese yen doesn't use a minor unit
console.log(
number.toLocaleString("ja-JP", { style: "currency", currency: "JPY" }),
);
// ¥123,457
// limit to three significant digits
console.log(number.toLocaleString("en-IN", { maximumSignificantDigits: 3 }));
// 1,23,000
// Use the host default language with options for number formatting
const num = 30000.65;
console.log(
num.toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
}),
);
// "30,000.65" where English is the default language, or
// "30.000,65" where German is the default language, or
// "30 000,65" where French is the default language
Спецификации
| Спецификация |
|---|
| ECMAScript® 2027 Language Specification # sec-number.prototype.tolocalestring |
| ECMAScript® 2027 Internationalization API Specification # sup-number.prototype.tolocalestring |
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
toLocaleString |
1 |
12До версии Edge 18 числа округлялись до 15 знаков после запятой. Например,(1000000000000005).toLocaleString('en-US') возвращал "1,000,000,000,000,010". |
1 |
4 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
locales_parameter |
24 |
12 |
29 |
15 |
10 |
26 |
56 |
14 |
10 |
1.5 |
4.4 |
10 |
1.0.0 |
1.8
1.0–1.8Доступны только данные локали дляen-US. |
13.0.0
0.12.0–13.0.0До версии 13.0.0 по умолчанию доступны только данные локали дляen-US. При указании других локалей функция молчаливо возвращается к en-US. Чтобы сделать полные данные ICU (локальные) доступными до версии 13, см. документацию Node.js по опции --with-intl и как предоставить данные. |
options_parameter |
24 |
12 |
29 |
15 |
10 |
26 |
56 |
14 |
10 |
1.5 |
4.4 |
10 |
1.0.0 |
1.0 |
0.12.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString