decimalPlaces

decimalPlaces в библиотеке AutoNumeric определяет количество знаков после десятичного разделителя, которые будут отображаться в отформатированном значении поля ввода и/или строки вывода. Параметр влияет исключительно на форматирование представления числа, не изменяя его математическую сущность при корректной работе с «сырыми» значениями.

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


Поведение при инициализации экземпляра

При создании экземпляра AutoNumeric параметр decimalPlaces задаётся в объекте конфигурации:

new AutoNumeric(domElement, {
    decimalPlaces: 2
});

При этом библиотека выполняет следующие операции:

  • анализирует исходное значение элемента;
  • нормализует число согласно текущим настройкам локали;
  • приводит значение к заданной точности;
  • применяет округление в зависимости от roundingMethod.

Если исходное значение содержит больше знаков после запятой, чем указано в decimalPlaces, происходит усечение или округление.


Механизм округления и влияние на точность

Параметр decimalPlaces тесно связан с настройкой roundingMethod, которая определяет стратегию обработки лишних знаков:

  • S — симметричное округление;
  • A — округление вверх;
  • s, a, n, B — различные режимы приближения к нулю или от него.

Пример:

new AutoNumeric(element, {
    decimalPlaces: 2,
    roundingMethod: 'S'
});

Поведение:

Входное значение Результат
10.126 10.13
10.124 10.12

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


Ограничение ввода пользователя

При активном редактировании поля decimalPlaces влияет на:

  • максимально допустимую длину дробной части;
  • автоматическое форматирование при потере фокуса;
  • поведение вставки из буфера обмена.

Если пользователь вводит значение с превышением допустимой точности, лишние символы либо блокируются, либо корректируются в реальном времени в зависимости от конфигурации modifyValueOnWheel, watchExternalChanges и режима обработки событий.


Взаимодействие с разделителем дробной части

Хотя decimalPlaces не определяет символ дробного разделителя, он тесно связан с параметрами локализации:

  • decimalCharacter
  • digitGroupSeparator

Пример:

new AutoNumeric(element, {
    decimalPlaces: 3,
    decimalCharacter: ',',
    digitGroupSeparator: ' '
});

При таком наборе настроек число:

1234.5

будет отображено как:

1 234,500

Даже если пользователь вводит 1 234,5, библиотека автоматически доводит значение до требуемой точности.


Поведение при пустых и неопределённых значениях

При инициализации или сбросе значения возможны следующие сценарии:

  • пустая строка интерпретируется как отсутствие числа;
  • null или undefined приводят к установке значения по умолчанию;
  • при флаге emptyInputBehavior поведение может изменяться.

decimalPlaces в этих случаях определяет только форматирование, которое будет применено при первом числовом вводе.


Изменение decimalPlaces после инициализации

Библиотека позволяет динамически менять параметры через API:

const an = new AutoNumeric(element, {
    decimalPlaces: 2
});

an.update({
    decimalPlaces: 4
});

После обновления:

  • текущее значение пересчитывается;
  • выполняется повторное форматирование;
  • возможна потеря точности отображения, если новое значение требует большего количества знаков.

Отличие отображаемых и «сырых» значений

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

Пример:

an.set(10.12987);

При настройке:

decimalPlaces: 2

Отображение:

10.13

Но «сырое» значение:

10.12987

Можно получить через:

an.getNumber();

Таким образом:

  • decimalPlaces → UI-формат
  • raw value → точное числовое значение

Взаимодействие с decimalPlacesRawValue

В конфигурации существует связанный параметр:

  • decimalPlacesRawValue

Он управляет точностью значения, возвращаемого через API.

Сравнение:

Параметр Назначение
decimalPlaces отображение
decimalPlacesRawValue возврат значения

Пример конфигурации:

new AutoNumeric(element, {
    decimalPlaces: 2,
    decimalPlacesRawValue: 6
});

Результат:

  • UI: 10.13
  • raw: 10.129870

Ограничения и особенности поведения

При использовании decimalPlaces следует учитывать ряд особенностей внутреннего механизма:

  • при изменении значения через колесо мыши дробная часть также округляется;
  • при вставке текста из буфера применяется принудительная нормализация;
  • при экспоненциальных значениях происходит предварительное преобразование в фиксированный формат;
  • при использовании высоких значений (например, 10–20 знаков) возможны ограничения точности JavaScript Number.

Производительность при высокой точности

Увеличение decimalPlaces приводит к дополнительным вычислениям:

  • расширяется строковое представление числа;
  • увеличивается нагрузка на форматирование при каждом событии input;
  • возрастает частота операций округления.

Особенно заметно это при:

  • массовых таблицах ввода;
  • финансовых калькуляторах с динамическими пересчётами;
  • интерактивных дашбордах.

Программная синхронизация значений

При работе с несколькими экземплярами важно учитывать, что изменение decimalPlaces может требовать синхронизации:

an1.update({ decimalPlaces: 2 });
an2.update({ decimalPlaces: 2 });

Если этого не сделать, возможны расхождения в отображении одинаковых чисел в разных полях.


Поведение при локалях с нестандартной точностью

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

При этом:

  • лишние знаки всегда обрезаются или округляются;
  • форматирование становится детерминированным;
  • пользовательский ввод нормализуется к единому виду.

Влияние на валидность данных

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

  • бизнес-валидацию форм;
  • сравнение значений;
  • сериализацию данных в API;
  • экспорт в CSV/JSON.

При этом несоответствие между decimalPlaces и серверной точностью часто становится источником расхождений в финансовых расчётах.