Минимальное и максимальное количество цифр

В 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"

Взаимодействие минимальных и максимальных ограничений

Механизм форматирования всегда стремится соблюсти два условия одновременно:

  1. Не меньше заданного минимума
  2. Не больше заданного максимума

Если возникает конфликт, приоритет отдаётся максимальному значению, так как оно ограничивает точность и предотвращает переполнение формата.

Пример конфликта:

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"

Здесь достигается полностью фиксированная структура числа:

  • целая часть всегда имеет 6 разрядов
  • дробная часть всегда имеет ровно 3 знака

Такие настройки применяются в финансовых системах, научных расчётах и протоколах передачи данных, где важна строгая унификация формата.


Поведение при больших числах

При увеличении числа разрядов 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 до 21
  • minimumFractionDigits: от 0 до 20
  • maximumFractionDigits: от 0 до 20

При выходе за пределы происходит автоматическая нормализация значений до допустимого диапазона. Это связано с внутренними ограничениями реализации спецификации ECMA-402.


Влияние локали на отображение цифр

Хотя количество цифр контролируется параметрами форматирования, отображение числа может меняться в зависимости от локали. Это касается разделителей, символов группировки и знаков.

const formatter = new Intl.NumberFormat('de-DE', {
  minimumFractionDigits: 2
});

formatter.format(1234.5); // "1.234,50"

Здесь запятая используется как десятичный разделитель, но количество цифр остаётся строго заданным.


Практическое применение фиксированных цифровых форматов

Использование минимального и максимального количества цифр особенно важно в системах, где требуется стабильное представление данных:

  • финансовые отчёты и бухгалтерия
  • отображение валютных значений
  • научные измерения
  • логирование и трассировка событий
  • генерация кодов и идентификаторов

В таких случаях форматирование становится частью контракта данных между системами, а не просто визуальной настройкой.