Количество знаков после запятой в числовом режиме Cleave.js
управляется параметром numeralDecimalScale. Этот параметр
определяет максимально допустимое число цифр в дробной части.
Базовый пример:
<input type="text" id="price">
new Cleave('#price', {
numeral: true,
numeralDecimalScale: 2
});
При вводе:
12345.6789
поле автоматически преобразуется в:
12,345.67
После достижения лимита новые цифры дробной части больше не принимаются.
Параметр работает только при активированном режиме:
numeral: true
Без него numeralDecimalScale игнорируется.
Пример:
new Cleave('#amount', {
numeral: true,
numeralDecimalScale: 3
});
Допустимый ввод:
15.123
Недопустимый:
15.12345
Лишние цифры будут отброшены автоматически.
0Если установить значение 0, дробная часть полностью
отключается.
new Cleave('#count', {
numeral: true,
numeralDecimalScale: 0
});
Теперь ввод:
1000.55
преобразуется в:
1,000
Такой режим особенно полезен для:
Cleave.js ограничивает максимальное число цифр после разделителя, но по умолчанию не дополняет число нулями.
Пример:
new Cleave('#sum', {
numeral: true,
numeralDecimalScale: 2
});
Результаты:
12 → 12
12.1 → 12.1
12.12 → 12.12
Нули автоматически не добавляются:
12 → 12.00
не произойдёт.
numeralDecimalScale вместе с
numeralDecimalMarkКоличество знаков после запятой тесно связано с символом дробного разделителя.
Пример для европейского формата:
new Cleave('#euro', {
numeral: true,
numeralDecimalMark: ',',
delimiter: ' ',
numeralDecimalScale: 2
});
Результат:
12345,67
будет отображён как:
12 345,67
new Cleave('#temperature', {
numeral: true,
numeralDecimalScale: 1
});
Примеры:
36.6
12.3
-5.8
Подходит для:
new Cleave('#money', {
numeral: true,
numeralDecimalScale: 2
});
Наиболее распространённый вариант для:
Пример:
1500.99
new Cleave('#weight', {
numeral: true,
numeralDecimalScale: 3
});
Применяется для:
Пример:
15.728
При превышении лимита Cleave.js не выдаёт ошибку и не ломает ввод. Библиотека просто блокирует лишние символы.
Конфигурация:
new Cleave('#field', {
numeral: true,
numeralDecimalScale: 2
});
Ввод:
15.123456
Результат:
15.12
Это делает интерфейс значительно удобнее по сравнению с ручной валидацией.
Formatted value:
12,345.67
Raw value:
12345.67
Получение raw-значения:
const cleave = new Cleave('#price', {
numeral: true,
numeralDecimalScale: 2
});
console.log(cleave.getRawValue());
getRawValue() сохраняет дробную часть с учётом
установленного лимита.
Ограничение дробной части работает и для отрицательных значений.
new Cleave('#balance', {
numeral: true,
numeralDecimalScale: 2
});
Ввод:
-1520.567
Результат:
-1,520.56
numeralPositiveOnlyМожно одновременно:
new Cleave('#salary', {
numeral: true,
numeralPositiveOnly: true,
numeralDecimalScale: 2
});
Теперь:
-150.25
не будет принято.
Количество знаков можно изменять в зависимости от режима работы интерфейса.
Пример:
let scale = 2;
const cleave = new Cleave('#dynamic', {
numeral: true,
numeralDecimalScale: scale
});
Пересоздание экземпляра:
cleave.destroy();
new Cleave('#dynamic', {
numeral: true,
numeralDecimalScale: 4
});
Такой подход используется в:
Cleave.js не выполняет математическое округление. Библиотека лишь ограничивает ввод.
Пример:
12.999
при:
numeralDecimalScale: 2
превратится в:
12.99
а не:
13.00
Если требуется настоящее округление, его необходимо выполнять отдельно:
const value = Number(cleave.getRawValue());
const rounded = value.toFixed(2);
Ограничение применяется не только при ручном вводе, но и при вставке из буфера обмена.
Вставка:
99999.888888
при настройке:
numeralDecimalScale: 2
автоматически станет:
99,999.88
import Cleave from 'cleave.js/react';
function App() {
return (
<Cleave
options={{
numeral: true,
numeralDecimalScale: 2
}}
/>
);
}
mounted() {
new Cleave(this.$refs.input, {
numeral: true,
numeralDecimalScale: 2
});
}
Для разных валют требуется разная точность.
numeralDecimalScale: 2
Пример:
1250.45
numeralDecimalScale: 0
Пример:
1500
numeralDecimalScale: 8
Пример:
0.12345678
new Cleave('#custom', {
numeral: true,
delimiter: '_',
numeralDecimalMark: ',',
numeralDecimalScale: 3
});
Результат:
1_234_567,891
numeral: trueНеправильно:
new Cleave('#field', {
numeralDecimalScale: 2
});
Правильно:
new Cleave('#field', {
numeral: true,
numeralDecimalScale: 2
});
Ошибка:
1.999 → 2.00
Cleave.js так не работает.
Фактический результат:
1.99
Неправильно:
numeralDecimalMark: ',',
delimiter: ','
Разделитель тысяч и дробной части не должны совпадать.
Правильно:
delimiter: ' ',
numeralDecimalMark: ','
<input type="text" id="payment">
const payment = new Cleave('#payment', {
numeral: true,
numeralThousandsGroupStyle: 'thousand',
delimiter: ' ',
numeralDecimalMark: ',',
numeralDecimalScale: 2
});
Поведение поля:
1234567,8999
превратится в:
1 234 567,89
Raw value:
1234567.89
new Cleave('#btc', {
numeral: true,
numeralDecimalScale: 8
});
Допустимый формат:
0.12345678
Лишние цифры будут автоматически отброшены.
new Cleave('#percent', {
numeral: true,
numeralDecimalScale: 1
});
Ввод:
15.78
Результат:
15.7
Такой формат часто используется для: