Параметр currencySymbolPlacement в библиотеке
AutoNumeric определяет положение валютного символа относительно
числового значения. Настройка влияет исключительно на визуальное
отображение числа и не изменяет внутреннее значение поля.
Параметр особенно важен при локализации интерфейсов, поскольку разные страны используют разные стандарты расположения валюты:
$123123€₽ 1 5001 500 ₸CHF 100Корректное расположение валютного символа повышает читаемость финансовых данных и делает интерфейс привычным для пользователей конкретного региона.
Параметр поддерживает два основных значения:
| Значение | Описание |
|---|---|
p |
Символ валюты располагается перед числом |
s |
Символ валюты располагается после числа |
Значение p означает prefix — префиксное
расположение.
new AutoNumeric('#price', {
currencySymbol: '$',
currencySymbolPlacement: 'p'
});
$1,250.00
Такой формат используется:
Значение s означает suffix — суффиксное
расположение.
new AutoNumeric('#price', {
currencySymbol: '€',
currencySymbolPlacement: 's'
});
1 250,00€
Такой вариант часто встречается:
currencySymbolПараметр currencySymbolPlacement не работает
самостоятельно. Он всегда используется вместе с
currencySymbol.
new AutoNumeric('#salary', {
currencySymbol: '₸',
currencySymbolPlacement: 's'
});
350 000₸
Если currencySymbol не указан, параметр позиционирования
не имеет смысла.
Во многих странах между числом и символом валюты используется пробел.
new AutoNumeric('#amount', {
currencySymbol: ' ₽',
currencySymbolPlacement: 's'
});
15 000 ₽
Обратите внимание: пробел добавлен непосредственно в строку валютного символа.
Для корректного отображения денежных значений часто используется неразрывный пробел.
new AutoNumeric('#amount', {
currencySymbol: '\u00A0₽',
currencySymbolPlacement: 's'
});
15 000 ₽
Неразрывный пробел предотвращает перенос валюты на следующую строку.
new AutoNumeric('#price', {
currencySymbol: '$ ',
currencySymbolPlacement: 'p'
});
$ 1,250.00
Подобное форматирование встречается реже, но иногда применяется в корпоративных системах и бухгалтерских интерфейсах.
Положение валютного символа влияет на отображение отрицательных значений.
new AutoNumeric('#balance', {
currencySymbol: '$',
currencySymbolPlacement: 'p'
});
-$1,500.00
или
$-1,500.00
Итоговый вид зависит также от параметров:
negativePositiveSignPlacementnegativeBracketsTypeOnBlurnegativePositiveSignPlacementПараметр negativePositiveSignPlacement управляет
позицией знака минус относительно валюты и числа.
new AutoNumeric('#debt', {
currencySymbol: '€',
currencySymbolPlacement: 's',
negativePositiveSignPlacement: 'p'
});
-1 200€
Другие варианты размещения:
1 200-€
1 200€-
€-1 200
Точная конфигурация зависит от бизнес-требований и национальных стандартов.
new AutoNumeric('#usd', {
digitGroupSeparator: ',',
decimalCharacter: '.',
currencySymbol: '$',
currencySymbolPlacement: 'p'
});
Результат:
$12,500.75
new AutoNumeric('#eur', {
digitGroupSeparator: ' ',
decimalCharacter: ',',
currencySymbol: ' €',
currencySymbolPlacement: 's'
});
Результат:
12 500,75 €
new AutoNumeric('#kzt', {
digitGroupSeparator: ' ',
decimalCharacter: ',',
currencySymbol: ' ₸',
currencySymbolPlacement: 's'
});
Результат:
1 250 000 ₸
new AutoNumeric('#rub', {
digitGroupSeparator: ' ',
decimalCharacter: ',',
currencySymbol: ' ₽',
currencySymbolPlacement: 's'
});
Результат:
95 000 ₽
Настройки можно изменять после инициализации объекта.
const an = new AutoNumeric('#price', {
currencySymbol: '$',
currencySymbolPlacement: 'p'
});
an.update({
currencySymbol: ' €',
currencySymbolPlacement: 's'
});
$1,500.00
1 500,00 €
Частая задача — изменение валюты в зависимости от выбора пользователя.
function changeCurrency(currency) {
switch(currency) {
case 'USD':
an.update({
currencySymbol: '$',
currencySymbolPlacement: 'p'
});
break;
case 'EUR':
an.update({
currencySymbol: ' €',
currencySymbolPlacement: 's'
});
break;
case 'KZT':
an.update({
currencySymbol: ' ₸',
currencySymbolPlacement: 's'
});
break;
}
}
Положение валютного символа влияет только на отображение.
an.getFormatted();
Результат:
1 250 €
an.getNumericString();
Результат:
1250
an.getNumber();
Результат:
1250
Внутреннее числовое значение остаётся независимым от позиции валюты.
Настройка может задаваться через data-атрибуты.
<input
type="text"
data-currency-symbol=" ₸"
data-currency-symbol-placement="s"
/>
currencySymbol: '₽'
Результат:
1500₽
Во многих интерфейсах такой формат выглядит слишком плотным.
currencySymbol: ' ₽'
Результат:
1500 ₽
Лишние пробелы ухудшают визуальное восприятие.
currencySymbol: '$',
currencySymbolPlacement: 's'
Результат:
150$
Для пользователей США такой формат выглядит непривычно.
При создании международных интерфейсов рекомендуется хранить настройки валют отдельно.
const currencies = {
USD: {
currencySymbol: '$',
currencySymbolPlacement: 'p'
},
EUR: {
currencySymbol: ' €',
currencySymbolPlacement: 's'
},
RUB: {
currencySymbol: ' ₽',
currencySymbolPlacement: 's'
},
KZT: {
currencySymbol: ' ₸',
currencySymbolPlacement: 's'
}
};
Многие пресеты AutoNumeric уже содержат корректное положение валютного символа.
new AutoNumeric('#price', AutoNumeric.getPredefinedOptions().euro);
Результат будет соответствовать европейскому формату:
1 234,56 €
В некоторых конфигурациях отображение валюты может изменяться при получении фокуса.
new AutoNumeric('#price', {
currencySymbol: ' ₽',
currencySymbolPlacement: 's',
showOnlyNumbersOnFocus: true
});
15000
15 000 ₽
Это особенно полезно для упрощения редактирования длинных денежных значений.
В бухгалтерских системах часто применяются строгие правила отображения:
1 500,00 ₽
или
(1 500,00 ₽)
Позиция валютного символа должна учитывать:
Изменение позиции валюты практически не влияет на производительность, поскольку AutoNumeric обновляет строковое представление значения, а не само число.
Даже при большом количестве полей:
document.querySelectorAll('.money').forEach(el => {
new AutoNumeric(el, {
currencySymbol: ' ₸',
currencySymbolPlacement: 's'
});
});
операции форматирования выполняются быстро и не создают заметной нагрузки на интерфейс.