Библиотека AutoNumeric построена вокруг идеи конфигурируемого форматирования чисел через единый объект настроек. Любая валютная специфика — символ, позиция, разделители, точность, правила округления — не является жёстко заданной, а формируется через параметры и их комбинации.
Создание собственных валютных настроек опирается на переопределение стандартного профиля и расширение его через пользовательские поля. В результате формируется набор правил, который может описывать практически любую денежную систему: от классических USD/EUR до локальных и нестандартных форматов.
Ключевой принцип заключается в том, что валютный профиль — это не отдельный тип данных, а конфигурационный объект, передаваемый в экземпляр AutoNumeric.
Базовый валютный профиль в AutoNumeric включает несколько групп параметров:
Пример минимальной структуры:
const currencyConfig = {
currencySymbol: "$",
currencySymbolPlacement: "p", // prefix
decimalCharacter: ".",
digitGroupSeparator: ",",
decimalPlaces: 2
};
Каждый из этих параметров влияет не только на отображение, но и на интерпретацию вводимого значения.
Создание собственного формата начинается с инициализации экземпляра AutoNumeric с кастомным объектом настроек.
const element = document.querySelector("#amount");
new AutoNumeric(element, {
currencySymbol: "₸",
currencySymbolPlacement: "s",
decimalCharacter: ".",
digitGroupSeparator: " ",
decimalPlaces: 2
});
В данном случае формируется формат, характерный для тенге:
Такая конфигурация уже считается полноценным пользовательским валютным профилем.
При работе с несколькими валютами логично выносить настройки в отдельные фабрики. Это снижает дублирование и упрощает поддержку.
const createCurrencyProfile = ({ symbol, decimals, position }) => ({
currencySymbol: symbol,
currencySymbolPlacement: position,
decimalCharacter: ".",
digitGroupSeparator: ",",
decimalPlaces: decimals
});
Использование:
const usd = createCurrencyProfile({
symbol: "$",
decimals: 2,
position: "p"
});
const chf = createCurrencyProfile({
symbol: "CHF ",
decimals: 2,
position: "p"
});
Далее профили передаются в AutoNumeric без изменений.
Помимо базового форматирования, AutoNumeric позволяет контролировать поведение ввода и преобразования значений.
{
decimalPlaces: 2,
roundingMethod: "S", // стандартное математическое округление
}
В пользовательских валютных настройках часто требуется различное округление:
{
minimumValue: "0",
maximumValue: "999999999.99"
}
Такие ограничения важны для финансовых полей, где отрицательные значения или переполнение недопустимы.
Разные страны используют разные соглашения отображения чисел, и это напрямую отражается в конфигурации.
{
currencySymbol: "€",
currencySymbolPlacement: "p",
decimalCharacter: ",",
digitGroupSeparator: ".",
decimalPlaces: 2
}
{
currencySymbol: "£",
currencySymbolPlacement: "p",
decimalCharacter: ".",
digitGroupSeparator: ",",
decimalPlaces: 2
}
В некоторых интерфейсах требуется комбинированный подход:
{
currencySymbol: "руб.",
currencySymbolPlacement: "s",
decimalCharacter: ",",
digitGroupSeparator: " ",
decimalPlaces: 0
}
Такая конфигурация характерна для интерфейсов без дробной части.
Одной из сильных сторон AutoNumeric является возможность менять конфигурацию без пересоздания DOM-элемента.
const anElement = new AutoNumeric("#price", {
currencySymbol: "$",
decimalPlaces: 2
});
anElement.update({
currencySymbol: "€",
decimalCharacter: ",",
digitGroupSeparator: "."
});
Это позволяет реализовывать:
При создании сложных систем часто используется комбинирование базовых профилей.
const baseCurrency = {
decimalCharacter: ".",
digitGroupSeparator: ",",
decimalPlaces: 2
};
const usdProfile = {
...baseCurrency,
currencySymbol: "$",
currencySymbolPlacement: "p"
};
const cadProfile = {
...baseCurrency,
currencySymbol: "CA$",
currencySymbolPlacement: "p"
};
Такой подход снижает вероятность рассинхронизации форматов между валютами.
Финансовые поля требуют строгой нормализации ввода. AutoNumeric автоматически преобразует ввод в валидный формат, но поведение можно контролировать.
{
allowDecimalPadding: true,
modifyValueOnWheel: false
}
{
watchExternalChanges: true,
formatOnPageLoad: true
}
При использовании в формах важен момент сериализации данных.
const anElement = new AutoNumeric("#amount", {
currencySymbol: "₸",
decimalPlaces: 2
});
document.querySelector("form").addEventListener("submit", () => {
const rawValue = anElement.getNumber();
});
Разделение между отображаемым значением и числовым значением является фундаментальным аспектом валютных настроек.
При масштабных интерфейсах удобно формировать библиотеку пресетов:
const currencyPresets = {
usd: {
currencySymbol: "$",
decimalPlaces: 2,
currencySymbolPlacement: "p"
},
eur: {
currencySymbol: "€",
decimalPlaces: 2,
currencySymbolPlacement: "p"
},
jpy: {
currencySymbol: "¥",
decimalPlaces: 0,
currencySymbolPlacement: "p"
}
};
Использование:
new AutoNumeric("#field", currencyPresets.jpy);
Некоторые валюты требуют высокой точности или нестандартного количества знаков после запятой.
{
currencySymbol: "BTC",
decimalPlaces: 8,
decimalCharacter: ".",
digitGroupSeparator: " "
}
Такая конфигурация позволяет адаптировать AutoNumeric под криптовалютные интерфейсы и финансовые панели.
В сложных приложениях валютные настройки часто зависят от логики:
function getCurrencyConfig(region) {
if (region === "KZ") {
return {
currencySymbol: "₸",
decimalPlaces: 2,
digitGroupSeparator: " "
};
}
if (region === "EU") {
return {
currencySymbol: "€",
decimalPlaces: 2,
decimalCharacter: ",",
digitGroupSeparator: "."
};
}
return {
currencySymbol: "$",
decimalPlaces: 2
};
}
В интерфейсах с частыми переключениями валют используется пересоздание или обновление конфигурации:
function switchCurrency(anElement, config) {
anElement.update(config);
}
Такой подход позволяет поддерживать единый input при смене контекста без потери пользовательского ввода.
Символ валюты может вести себя по-разному:
{
currencySymbol: "USD ",
currencySymbolPlacement: "p",
showCurrencySymbolOnFocus: true
}
Это позволяет управлять визуальной плотностью интерфейса.
При разработке финансовых интерфейсов на AutoNumeric валютные настройки обычно становятся отдельным слоем архитектуры.
Типовая структура:
Такой подход позволяет разделить:
и избежать смешивания логики форматирования с бизнес-операциями.