Обновление точности в AutoNumeric затрагивает один из ключевых аспектов работы библиотеки — управление количеством знаков после запятой и динамическое изменение правил форматирования уже инициализированных полей ввода. В прикладных интерфейсах это напрямую связано с финансовыми формами, калькуляторами, системами учёта и любыми интерфейсами, где значение должно отображаться с контролируемой степенью округления и точности.
Внутри AutoNumeric точность представляется набором параметров, которые определяют:
Ключевой параметр, отвечающий за точность:
Дополнительно используются связанные настройки:
Эти параметры формируют поведение числа как при вводе, так и при отображении, и именно их изменение лежит в основе обновления точности.
При создании экземпляра AutoNumeric точность задаётся через конфигурационный объект:
const element = document.querySelector('#amount');
const anElement = new AutoNumeric(element, {
decimalPlaces: 2,
decimalPlacesShownOnFocus: 4,
decimalPlacesShownOnBlur: 2,
roundingMethod: AutoNumeric.options.roundingMethod.halfUp
});
В этом случае поле будет отображать значение с двумя знаками после запятой в обычном состоянии и с четырьмя — при фокусе.
Такая модель удобна, но статична: изменение бизнес-логики часто требует динамического обновления точности без пересоздания инстанса.
AutoNumeric поддерживает изменение параметров уже инициализированного экземпляра через метод обновления настроек.
Основной подход:
anElement.update({
decimalPlaces: 3
});
После вызова:
Это позволяет менять поведение поля на лету, например при переключении валют или режимов отображения.
При увеличении или уменьшении количества знаков после запятой происходит перерасчёт отображаемого значения.
anElement.set(12.34567);
anElement.update({
decimalPlaces: 2
});
Результат:
anElement.update({
decimalPlaces: 5
});
Результат:
Это важное различие: AutoNumeric не изменяет математическую сущность числа, а изменяет его форматирование.
Особое поведение проявляется при использовании разных настроек точности для фокуса и потери фокуса.
anElement.update({
decimalPlacesShownOnFocus: 6,
decimalPlacesShownOnBlur: 2
});
При фокусе пользователь видит расширенную точность, что удобно для редактирования финансовых данных, а при потере фокуса значение приводится к компактному виду.
Изменение этих параметров через update сразу влияет на текущее состояние поля без необходимости переинициализации.
AutoNumeric позволяет получать экземпляр и изменять его конфигурацию через API:
const anElement = AutoNumeric.getAutoNumericElement('#amount');
anElement.update({
decimalPlaces: 4
});
Этот подход используется в архитектурах, где инстанс не хранится явно в переменной, а извлекается из DOM-элемента.
При обновлении точности ключевую роль играет параметр округления.
anElement.update({
decimalPlaces: 2,
roundingMethod: AutoNumeric.options.roundingMethod.halfEven
});
Типичные стратегии:
При изменении точности библиотека пересчитывает значение в соответствии с выбранным методом, что может привести к изменению отображаемого результата даже без изменения входного значения.
В интерфейсах с динамическими формами точность часто зависит от состояния приложения:
Пример сценария:
function setCurrency(currency) {
if (currency === 'JPY') {
anElement.update({
decimalPlaces: 0
});
} else {
anElement.update({
decimalPlaces: 2
});
}
}
При смене валюты поле автоматически адаптируется под правила точности без разрушения DOM-элемента.
Если на странице существует множество полей AutoNumeric, обновление точности может выполняться централизованно:
AutoNumeric.getAutoNumericElements().forEach((an) => {
an.update({
decimalPlaces: 3
});
});
В таких сценариях важно учитывать:
При обновлении параметров возможны конфликты между связанными настройками:
Например:
anElement.update({
decimalPlaces: 2,
minimumValue: "0.000"
});
В этом случае библиотека должна привести конфигурацию к непротиворечивому состоянию, что может изменить отображение сильнее, чем ожидалось.
При активном вводе пользователя изменение точности может привести к немедленной нормализации значения. Это означает:
Для минимизации эффекта обычно применяют обновление точности вне активного фокуса:
if (!anElement.isFocused) {
anElement.update({ decimalPlaces: 2 });
}
Типовой сценарий — режим «просмотра» и режим «редактирования».
function setViewMode() {
anElement.update({
decimalPlaces: 2
});
}
function setEditMode() {
anElement.update({
decimalPlaces: 6
});
}
В режиме редактирования пользователь получает более точное представление числа, в режиме просмотра — компактное отображение.
Частое изменение точности может привести к:
Поэтому обновление точности обычно группируется:
requestAnimationFrame(() => {
anElement.update({ decimalPlaces: 4 });
});
или выполняется в рамках батчинга изменений.
При изменении точности AutoNumeric выполняет последовательность операций:
Эта цепочка гарантирует согласованность между отображением и логикой.
При получении значения через API:
anElement.getNumber();
результат зависит от текущей точности и настроек rawValue. При изменении decimalPlaces может изменяться и формат возвращаемого значения, особенно если используется строковое представление.
Обновление точности в AutoNumeric выступает не просто косметической операцией форматирования, а полноценным механизмом управления числовым представлением данных, влияющим на округление, ввод, отображение и синхронизацию состояния поля ввода в реальном времени.