Spec-Zone.ru › JavaScript

Intl.NumberFormat.prototype.format()

Базовый уровень Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2017 года.

Метод format() экземпляров Intl.NumberFormat форматирует число в соответствии с локалью и параметрами форматирования этого объекта Intl.NumberFormat.

Попробуйте

const amount = 654321.987;

const options1 = { style: "currency", currency: "RUB" };
const numberFormat1 = new Intl.NumberFormat("ru-RU", options1);

console.log(numberFormat1.format(amount));
// Expected output: "654 321,99 ₽"

const options2 = { style: "currency", currency: "USD" };
const numberFormat2 = new Intl.NumberFormat("en-US", options2);

console.log(numberFormat2.format(amount));
// Expected output: "$654,321.99"

Синтаксис

format(number)

Параметры

number
Number, BigInt или строка, которую нужно отформатировать. Строки анализируются так же, как и при преобразовании чисел, за исключением того, что format() будет использовать точное значение, которое представляет строка, избегая потери точности при неявном преобразовании в число.

Примечание: Более старые версии спецификации анализировали строки как Number. Проверьте таблицу совместимости для вашего браузера.

Возвращаемое значение

Строка, представляющая заданное number, отформатированное в соответствии с локалью и параметрами форматирования этого объекта Intl.NumberFormat.

Примечание: В большинстве случаев форматирование, возвращаемое format(), является согласованным. Однако вывод может различаться между реализациями, даже в пределах одной и той же локали — вариации вывода предусмотрены и разрешены спецификацией. Результат также может отличаться от того, что вы ожидаете. Например, строка может использовать неразрывные пробелы или быть окружена двунаправленными управляющими символами. Вы не должны сравнивать результаты format() с жёстко заданными константами.

Описание

Значения Number в JavaScript страдают от потери точности, если они слишком велики или слишком малы, что делает текстовое представление неточным. Если вы выполняете вычисления с целыми числами, большими чем Number.MAX_SAFE_INTEGER, вам следует использовать BigInt, который будет отформатирован правильно:

new Intl.NumberFormat("en-US").format(1234567891234567891); // 1,234,567,891,234,568,000
new Intl.NumberFormat("en-US").format(1234567891234567891n); // 1,234,567,891,234,567,891

Вы также можете передавать очень большие строки для форматирования в виде десятичной строки произвольной точности (если вы выполняете вычисления с данными, вам всё равно потребуется работать с BigInt):

new Intl.NumberFormat("en-US").format("1234567891234567891"); // 1,234,567,891,234,567,891

Примеры

Использование format

Используйте функцию-геттер format для форматирования одиночного денежного значения. Приведённый ниже код показывает, как отформатировать валюту "рубли" для русской локали:

const options = { style: "currency", currency: "RUB" };
const numberFormat = new Intl.NumberFormat("ru-RU", options);
console.log(numberFormat.format(654321.987));
// "654 321,99 ₽"

Использование format с map

Используйте функцию-геттер format для форматирования всех чисел в массиве. Обратите внимание, что функция привязана к объекту Intl.NumberFormat, из которого она была получена, поэтому её можно передать непосредственно в Array.prototype.map. Это считается историческим артефактом, частью соглашения, которое больше не соблюдается для новых функций, но сохранено для поддержания совместимости с существующими программами.

const a = [123456.789, 987654.321, 456789.123];
const numberFormat = new Intl.NumberFormat("es-ES");
const formatted = a.map((n) => numberFormat.format(n));
console.log(formatted.join("; "));
// "123.456,789; 987.654,321; 456.789,123"

Использование format со строкой

Используя строку, мы можем указать числа, которые больше Number.MAX_SAFE_INTEGER, не теряя точности.

const numberFormat = new Intl.NumberFormat("en-US");

// Here the value is converted to a Number
console.log(numberFormat.format(987654321987654321));
// 987,654,321,987,654,300

// Here we use a string and don't lose precision
console.log(numberFormat.format("987654321987654321"));
// 987,654,321,987,654,321

Мы также можем использовать общий синтаксис экспоненты "E" для десятичных строк: #.#E#. Приведённый ниже код создаёт BigInt, приводит его к строке с суффиксом E-6, а затем форматирует его.

const numberFormat = new Intl.NumberFormat("en-US");
const bigNum = 1000000000000000110000n;
console.log(numberFormat.format(bigNum));
// "1,000,000,000,000,000,110,000"

// Format as a string using the `E` syntax:
console.log(numberFormat.format(`${bigNum}E-6`));
// "1,000,000,000,000,000.11"

Спецификации

Спецификация
ECMAScript® 2027 Internationalization API Specification
# sec-intl.numberformat.prototype.format

Совместимость с браузерами

Десктопные Мобильные Серверные
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
format
24
12До Edge 18 числа округлялись до 15 десятичных знаков. Например, new Intl.NumberFormat('en-US').format(1000000000000005) возвращает "1,000,000,000,000,010".
29
15
10
25
56
14
10
1.5
4.4
10
1.0.0
1.8
0.12.0До версии 13.0.0 по умолчанию доступны только данные локали для en-US. Дополнительные сведения см. в описании конструктора NumberFormat().
number_parameter-string_decimal
106
106
116
92
15.4
106
116
72
15.4
20.0
106
15.4
1.0.0
1.25
19.0.0

Смотрите также

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

© 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/Intl/NumberFormat/format

Spec-Zone.ru

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