Spec-Zone.ru › JavaScript

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

См. также

  • Intl.NumberFormat
  • Number.prototype.toString()

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API