В Intl.NumberFormat поведение числа по количеству
отображаемых цифр управляется набором параметров, которые определяют,
как именно число будет выровнено, дополнено нулями и округлено при
форматировании.
Одним из базовых параметров является минимальное количество цифр в
целой части числа. Он задаётся через
minimumIntegerDigits.
Этот параметр определяет, сколько разрядов должно быть у целой части числа в итоговой строке. Если фактическое число содержит меньше разрядов, оно дополняется ведущими нулями.
const formatter = new Intl.NumberFormat('en-US', {
minimumIntegerDigits: 5
});
formatter.format(42); // "00042"
formatter.format(1234); // "01234"
formatter.format(123456); // "123456"
Логика работы проста: форматтер не изменяет значение числа, а лишь влияет на его строковое представление. Это особенно важно при формировании фиксированных идентификаторов, кодов, серийных номеров и табличных данных.
Минимальное количество целых разрядов может принимать значения от 1 до 21. Значения вне диапазона приводят к автоматической нормализации.
Поведение minimumIntegerDigits связано с механизмом
дополнения числа слева. Форматтер анализирует длину целой части и
сравнивает её с требуемым минимумом.
Если число отрицательное, знак минуса не учитывается при подсчёте разрядов:
const formatter = new Intl.NumberFormat('en-US', {
minimumIntegerDigits: 4
});
formatter.format(-7); // "-0007"
Знак сохраняется отдельно, а дополнение нулями применяется только к абсолютной величине числа.
Для управления дробной частью используются параметры
minimumFractionDigits и maximumFractionDigits.
Они задают диапазон допустимой точности при отображении чисел с
плавающей точкой.
minimumFractionDigits определяет, сколько знаков после
запятой должно быть минимум, даже если число содержит меньше значимых
цифр.
const formatter = new Intl.NumberFormat('en-US', {
minimumFractionDigits: 3
});
formatter.format(5); // "5.000"
formatter.format(5.1); // "5.100"
formatter.format(5.1234); // "5.1234"
Если дробная часть отсутствует, она добавляется в виде нулей до требуемого минимума. Если дробная часть уже длиннее минимального значения, она не обрезается этим параметром.
maximumFractionDigits отвечает за верхний предел
точности. При превышении заданного количества знаков происходит
округление.
const formatter = new Intl.NumberFormat('en-US', {
maximumFractionDigits: 2
});
formatter.format(5.129); // "5.13"
formatter.format(5.124); // "5.12"
formatter.format(5); // "5"
Округление выполняется по стандартным математическим правилам (round half away from zero). Это означает, что значение 5.125 при двух знаках после запятой станет 5.13.
Комбинация минимального и максимального количества дробных цифр позволяет одновременно контролировать и точность, и стабильность отображения:
const formatter = new Intl.NumberFormat('en-US', {
minimumFractionDigits: 2,
maximumFractionDigits: 4
});
formatter.format(5); // "5.00"
formatter.format(5.1); // "5.10"
formatter.format(5.12345); // "5.1235"
Механизм форматирования всегда стремится соблюсти два условия одновременно:
Если возникает конфликт, приоритет отдаётся максимальному значению, так как оно ограничивает точность и предотвращает переполнение формата.
Пример конфликта:
const formatter = new Intl.NumberFormat('en-US', {
minimumFractionDigits: 5,
maximumFractionDigits: 2
});
formatter.format(3.1); // "3.10"
Хотя минимальное значение требует пять знаков, максимальное ограничивает результат двумя. В таких случаях поведение нормализуется в сторону максимального ограничения.
Часто параметры целой и дробной части используются вместе для формирования строго фиксированного числового формата.
const formatter = new Intl.NumberFormat('en-US', {
minimumIntegerDigits: 6,
minimumFractionDigits: 3,
maximumFractionDigits: 3
});
formatter.format(12.5); // "000012.500"
Здесь достигается полностью фиксированная структура числа:
Такие настройки применяются в финансовых системах, научных расчётах и протоколах передачи данных, где важна строгая унификация формата.
При увеличении числа разрядов minimumIntegerDigits
перестаёт влиять на форматирование, если фактическая длина числа
превышает заданный минимум.
const formatter = new Intl.NumberFormat('en-US', {
minimumIntegerDigits: 3
});
formatter.format(12345); // "12345"
Форматтер не обрезает число и не добавляет лишние символы справа — он работает только как механизм выравнивания.
Округление в Intl.NumberFormat выполняется на этапе
форматирования, а не изменения исходного значения. Это означает, что
результат всегда зависит от локали и настроек округления, но не влияет
на сам JavaScript-числовой тип.
const formatter = new Intl.NumberFormat('en-US', {
maximumFractionDigits: 1
});
const value = 1.05;
formatter.format(value); // "1.1"
value; // 1.05 (не изменилось)
Такое поведение позволяет безопасно использовать форматирование без риска потери точности исходных данных.
Параметры количества цифр имеют технические ограничения:
minimumIntegerDigits: от 1 до 21minimumFractionDigits: от 0 до 20maximumFractionDigits: от 0 до 20При выходе за пределы происходит автоматическая нормализация значений до допустимого диапазона. Это связано с внутренними ограничениями реализации спецификации ECMA-402.
Хотя количество цифр контролируется параметрами форматирования, отображение числа может меняться в зависимости от локали. Это касается разделителей, символов группировки и знаков.
const formatter = new Intl.NumberFormat('de-DE', {
minimumFractionDigits: 2
});
formatter.format(1234.5); // "1.234,50"
Здесь запятая используется как десятичный разделитель, но количество цифр остаётся строго заданным.
Использование минимального и максимального количества цифр особенно важно в системах, где требуется стабильное представление данных:
В таких случаях форматирование становится частью контракта данных между системами, а не просто визуальной настройкой.