Параметр decimalCharacter в AutoNumeric определяет
символ, используемый для разделения целой и дробной части числа при
отображении и вводе. Это один из ключевых элементов локализации
числового формата, поскольку разные регионы используют различные
соглашения: точку, запятую или даже альтернативные символы.
AutoNumeric строго разделяет внутреннее числовое представление
(JavaScript Number) и визуальное представление в поле ввода.
decimalCharacter влияет исключительно на форматирование
строки в input-элементе и на парсинг пользовательского ввода.
Основная задача decimalCharacter заключается в том,
чтобы задать символ, который:
Примеры распространённых значений:
. — стандарт JavaScript и англоязычных локалей, — распространён в Европе и России'·' — используется в некоторых специализированных
финансовых системахПри инициализации AutoNumeric параметр задаётся через объект конфигурации:
new AutoNumeric('#input', {
decimalCharacter: '.'
});
Изменение на запятую:
new AutoNumeric('#input', {
decimalCharacter: ','
});
При этом важно учитывать, что изменение decimalCharacter
без синхронизации других параметров может привести к неоднозначному
отображению, особенно при наличии разделителей групп разрядов.
decimalCharacter тесно связан с параметром
digitGroupSeparator, который отвечает за разделение
тысячных групп.
Комбинации:
{
digitGroupSeparator: ' ',
decimalCharacter: ','
}
Пример отображения:
12 345 678,90
Другой вариант:
{
digitGroupSeparator: ',',
decimalCharacter: '.'
}
Результат:
12,345,678.90
Критическое правило: decimalCharacter и
digitGroupSeparator не должны совпадать, иначе парсер не
сможет однозначно интерпретировать значение.
AutoNumeric обрабатывает ввод посимвольно. При использовании
decimalCharacter происходит следующее:
Пример:
Если задано:
decimalCharacter: ','
Ввод:
1234,56
Внутренне интерпретируется как:
1234.56
AutoNumeric всегда хранит значение в нормализованном виде (JavaScript
number с точкой как разделителем дробной части), независимо от
decimalCharacter.
Пример:
const an = new AutoNumeric('#input', {
decimalCharacter: ','
});
Пользователь вводит:
10,75
Внутри библиотеки это преобразуется в:
10.75
При получении значения:
an.getNumber();
результат всегда будет:
10.75
При смене локали decimalCharacter часто используется
вместе с другими параметрами:
digitGroupSeparatorcurrencySymboldecimalPlacesoutputFormatПример конфигурации для европейского формата:
new AutoNumeric('#input', {
decimalCharacter: ',',
digitGroupSeparator: '.',
currencySymbol: '€ ',
currencySymbolPlacement: 'p'
});
Отображение:
€ 1.234,56
Если пользователь пытается использовать альтернативный десятичный разделитель, он будет игнорироваться.
decimalCharacter: ','
Ввод:
12.34
Результат:
1234
(точка воспринимается как разделитель групп или игнорируется, в зависимости от режима)
Любой символ, не совпадающий с decimalCharacter, не
может использоваться как разделитель дробной части.
Это означает, что при строгих настройках:
1,23 допустим только если
decimalCharacter: ','1.23 допустим только если
decimalCharacter: '.'Повторное использование символа дроби блокируется:
12,3,4
Превращается в:
12,34
или корректируется в зависимости от стратегии очистки ввода.
AutoNumeric позволяет динамически менять форматирование:
an.update({
decimalCharacter: '.'
});
После обновления:
Возвращает строку с учётом decimalCharacter:
an.getString();
Пример:
"1.234,56"
Игнорирует decimalCharacter:
1234.56
При установке значения можно использовать как точку, так и текущий
decimalCharacter, но предпочтительна нормализованная
форма:
an.set(1234.56);
или
an.set('1234.56');
При отправке данных на сервер decimalCharacter не должен
участвовать в сериализации. AutoNumeric отделяет UI-формат от
data-layer.
Правильный поток данных:
1.234,561234.56Если дробная часть отсутствует:
1234
decimalCharacter не влияет на отображение, но остаётся
доступным для ввода дроби.
При вводе:
1234,
AutoNumeric ожидает дальнейшие цифры и может отображать:
1234,
или:
1234,00
в зависимости от настроек фиксированной точности.
decimalCharacter не конфликтует с минусом:
-12,34
Парсится корректно при любом допустимом символе дроби.
В реальных приложениях decimalCharacter критичен в
следующих случаях:
decimalCharacter и
digitGroupSeparator;Если поле пустое, decimalCharacter не отображается, но
остаётся активным для ввода первого дробного символа.
В режимах строгой валидации decimalCharacter становится
единственным допустимым символом для дробной части, полностью блокируя
альтернативные варианты ввода.
В упрощённых режимах возможна более мягкая интерпретация ввода, но нормализация всё равно приводит к единому внутреннему формату.