Библиотека AutoNumeric предоставляет механизм форматирования числовых значений с учётом валютных правил отображения. Валютные настройки не ограничиваются символом денежной единицы: они включают правила группировки разрядов, позиционирование символа, точность округления и формат десятичного разделителя.
Внутренне AutoNumeric разделяет сырые значения (raw value) и отформатированные значения (formatted value), что позволяет изменять валютное отображение без потери данных.
Основные опции, влияющие на валютное отображение:
Определяет символ валюты:
currencySymbol: '$'
Поддерживаются любые строки, включая мультисимвольные обозначения:
currencySymbol: '€'
currencySymbol: 'USD '
Определяет расположение символа относительно числа:
p — префиксs — суффиксcurrencySymbolPlacement: 'p'
Примеры:
$10001000 €Разделитель тысячных групп:
digitGroupSeparator: ','
Варианты:
, (английский стиль). (европейский стиль)' ' (ISO-стиль)Символ десятичного разделителя:
decimalCharacter: '.'
Определяет фиксированное количество знаков после запятой:
decimalPlacesOverride: 2
Метод округления:
S — half-upU — ceilingD — floorB — bankers roundingroundingMethod: 'S'
Ключевой механизм динамического изменения параметров — метод
update(). Он позволяет изменять конфигурацию без
пересоздания экземпляра AutoNumeric.
const anElement = new AutoNumeric('#price', {
currencySymbol: '$',
decimalPlacesOverride: 2
});
Изменение валюты:
anElement.update({
currencySymbol: '€',
currencySymbolPlacement: 'p',
decimalCharacter: ',',
digitGroupSeparator: ' '
});
После вызова update():
Типичный сценарий — переключение между валютами (USD → EUR → KZT).
function setUSD(an) {
an.update({
currencySymbol: '$',
currencySymbolPlacement: 'p',
decimalCharacter: '.',
digitGroupSeparator: ',',
decimalPlacesOverride: 2
});
}
function setEUR(an) {
an.update({
currencySymbol: '€',
currencySymbolPlacement: 's',
decimalCharacter: ',',
digitGroupSeparator: ' ',
decimalPlacesOverride: 2
});
}
Вызов переключения:
setEUR(anElement);
AutoNumeric сохраняет числовое значение в неизменном виде, даже при смене формата.
Пример:
anElement.se t(12345.67);
Отображение:
$12,345.67После обновления:
anElement.update({
currencySymbol: '€',
decimalCharacter: ',',
digitGroupSeparator: ' '
});
Отображение:
€12 345,67При этом raw value остаётся:
anElement.getNumber(); // 12345.67
В некоторых сценариях требуется принудительно пересобрать формат без изменения настроек.
anElement.reformat();
Это используется, если:
При работе с несколькими полями используется обновление группы инстансов.
const fields = AutoNumeric.multiple('.price-field');
fields.forEach(an => {
an.update({
currencySymbol: '€',
currencySymbolPlacement: 's',
decimalCharacter: ',',
digitGroupSeparator: ' '
});
});
Такая схема применяется в:
Часто валютные настройки группируются в конфигурационные профили.
const currencyProfiles = {
USD: {
currencySymbol: '$',
currencySymbolPlacement: 'p',
decimalCharacter: '.',
digitGroupSeparator: ',',
decimalPlacesOverride: 2
},
EUR: {
currencySymbol: '€',
currencySymbolPlacement: 's',
decimalCharacter: ',',
digitGroupSeparator: ' ',
decimalPlacesOverride: 2
},
KZT: {
currencySymbol: '₸',
currencySymbolPlacement: 's',
decimalCharacter: ',',
digitGroupSeparator: ' ',
decimalPlacesOverride: 0
}
};
Применение:
anElement.update(currencyProfiles.KZT);
При изменении валютных настроек во время активного ввода происходит перерасчёт отображения:
Особенно важно при изменении:
Изменение currencySymbol не влияет на числовую часть
значения, но влияет на визуальное позиционирование.
Пример:
anElement.update({
currencySymbol: 'USD ',
currencySymbolPlacement: 'p'
});
или
anElement.update({
currencySymbol: ' USD',
currencySymbolPlacement: 's'
});
В обоих случаях raw value остаётся идентичным.
В реальных приложениях часто меняется сразу несколько параметров:
anElement.update({
currencySymbol: 'CHF',
currencySymbolPlacement: 'p',
decimalCharacter: '.',
digitGroupSeparator: "'",
decimalPlacesOverride: 2,
roundingMethod: 'S'
});
Такая операция полностью переопределяет формат отображения, сохраняя при этом числовую модель данных.
При получении валютных настроек с backend выполняется прямое применение конфигурации:
fetch('/api/currency-settings')
.then(res => res.json())
.then(config => {
anElement.update(config);
});
Такая схема позволяет централизованно управлять форматированием во всём приложении без изменения клиентской логики.
Метод update() поддерживает частичную замену параметров.
Если передан неполный объект, остальные значения сохраняются:
anElement.update({
currencySymbol: '€'
});
Остальные параметры (разделители, округление) остаются прежними.
AutoNumeric оптимизирован для быстрого перерасчёта форматирования:
При массовых обновлениях предпочтительно использовать батч-обработку через массив инстансов вместо последовательных вызовов с задержками.