Форматирование числовых значений в денежных, процентных и измерительных полях часто требует контроля расстояния между числом и символом валюты, процента или другой единицы измерения. В разных странах и форматах записи используются разные правила:
100$$100100 $€ 100100 ₽Библиотека AutoNumeric позволяет управлять такими пробелами через комбинацию параметров:
currencySymbolcurrencySymbolPlacementnegativePositiveSignPlacementПравильная настройка особенно важна для:
В AutoNumeric пробел между числом и символом обычно задаётся не
отдельной опцией, а включается непосредственно в значение
currencySymbol.
Пример:
new AutoNumeric('#price', {
currencySymbol: ' ₽',
currencySymbolPlacement: 's'
});
Результат:
1 500 ₽
Здесь пробел расположен внутри строки ' ₽'.
Наиболее распространённый европейский формат:
1 250 €
15 000 ₽
100 ₸
Настройка:
new AutoNumeric('#price', {
currencySymbol: ' €',
currencySymbolPlacement: 's'
});
| Параметр | Значение |
|---|---|
currencySymbol |
' €' |
currencySymbolPlacement |
's' |
's' означает размещение символа после числа
(suffix).
Американский и некоторые международные форматы используют символ перед значением:
$ 1,500
€ 2,000
¥ 3000
Конфигурация:
new AutoNumeric('#price', {
currencySymbol: '$ ',
currencySymbolPlacement: 'p'
});
Результат:
$ 1,500
pПараметр:
currencySymbolPlacement: 'p'
означает размещение символа перед числом (prefix).
Некоторые финансовые интерфейсы предпочитают компактный вид:
$1500
1500€
Настройка:
new AutoNumeric('#price', {
currencySymbol: '$',
currencySymbolPlacement: 'p'
});
или:
new AutoNumeric('#price', {
currencySymbol: '€',
currencySymbolPlacement: 's'
});
Обычный пробел может приводить к нежелательному переносу строки:
1000
₽
Чтобы число и символ всегда оставались вместе, используется неразрывный пробел:
new AutoNumeric('#price', {
currencySymbol: '\u00A0₽',
currencySymbolPlacement: 's'
});
Результат визуально выглядит так же:
1 000 ₽
Но перенос между числом и символом уже невозможен.
В профессиональной типографике часто применяется узкий неразрывный
пробел (U+202F).
Пример:
new AutoNumeric('#price', {
currencySymbol: '\u202F₽',
currencySymbolPlacement: 's'
});
Такой вариант особенно полезен для:
AutoNumeric может форматировать проценты аналогичным образом.
Пример:
new AutoNumeric('#percent', {
suffixText: ' %'
});
Результат:
25 %
Без пробела:
suffixText: '%'
Результат:
25%
currencySymbol и suffixTextcurrencySymbolИспользуется для валют:
currencySymbol: ' ₽'
Поддерживает:
suffixTextДобавляет произвольный текст:
suffixText: ' кг'
Результат:
150 кг
Подходит для:
new AutoNumeric('#weight', {
suffixText: ' кг'
});
Результат:
75 кг
new AutoNumeric('#distance', {
suffixText: ' м'
});
new AutoNumeric('#size', {
suffixText: ' px'
});
Разные локали используют разные правила.
1 500 €
Конфигурация:
new AutoNumeric('#price', {
digitGroupSeparator: ' ',
decimalCharacter: ',',
currencySymbol: ' €',
currencySymbolPlacement: 's'
});
$1,500.00
Настройка:
new AutoNumeric('#price', {
digitGroupSeparator: ',',
decimalCharacter: '.',
currencySymbol: '$',
currencySymbolPlacement: 'p'
});
1 500 ₽
Конфигурация:
new AutoNumeric('#price', {
digitGroupSeparator: ' ',
decimalCharacter: ',',
currencySymbol: ' ₽',
currencySymbolPlacement: 's'
});
Важно различать:
raw value).Пример:
anElement.getFormatted();
Вернёт:
1 500 ₽
А:
anElement.getNumericString();
Вернёт:
1500
Пробелы и символы автоматически удаляются из числового значения.
При использовании обычных пробелов браузер может:
Поэтому для интерфейсов с высокой точностью отображения предпочтительнее:
currencySymbol: '\u00A0₽'
или:
currencySymbol: ' ₽'
Однако второй вариант работает только после HTML-интерпретации строки и не всегда подходит для прямой настройки AutoNumeric.
Наиболее надёжный вариант — Unicode-символ:
\u00A0
Пробелы влияют и на отображение отрицательных значений.
Пример:
new AutoNumeric('#price', {
currencySymbol: ' ₽',
currencySymbolPlacement: 's',
negativePositiveSignPlacement: 'p'
});
Результат:
-1 500 ₽
При бухгалтерском формате:
new AutoNumeric('#price', {
currencySymbol: ' ₽',
currencySymbolPlacement: 's',
negativeBracketsTypeOnBlur: '(,)'
});
Результат:
(1 500 ₽)
Иногда интерфейсы требуют увеличенного расстояния:
currencySymbol: ' ₽'
Результат:
1 500 ₽
Такой подход обычно не рекомендуется, поскольку:
Пробелы могут меняться при переключении локали.
Пример:
if (locale === 'fr') {
anElement.update({
currencySymbol: ' €',
currencySymbolPlacement: 's'
});
}
или:
if (locale === 'en-US') {
anElement.update({
currencySymbol: '$',
currencySymbolPlacement: 'p'
});
}
Ошибка:
currencySymbol: '₽'
при ожидании:
1 500 ₽
Исправление:
currencySymbol: ' ₽'
Ошибка:
currencySymbol: ' ₽ '
Результат:
1 500 ₽
Появляется хвостовой пробел.
Использование обычного пробела:
currencySymbol: ' ₽'
может приводить к переносу валюты на следующую строку.
Лучше:
currencySymbol: '\u00A0₽'
new AutoNumeric('#salary', {
digitGroupSeparator: ' ',
decimalCharacter: ',',
decimalPlaces: 2,
currencySymbol: '\u00A0₽',
currencySymbolPlacement: 's'
});
Отображение:
125 000,00 ₽
new AutoNumeric('#speed', {
digitGroupSeparator: ' ',
decimalCharacter: '.',
decimalPlaces: 1,
suffixText: ' км/ч'
});
Результат:
120.5 км/ч
new AutoNumeric('#tax', {
decimalPlaces: 2,
suffixText: ' %'
});
Результат:
20.00 %