Метод getNumber() в библиотеке AutoNumeric предназначен
для получения числового значения из форматированного поля в виде объекта
Number. Метод удаляет визуальное оформление, разделители
групп разрядов, валютные символы, проценты и другие элементы
форматирования, возвращая стандартное числовое значение JavaScript.
Основная задача метода — преобразование пользовательского ввода в число, пригодное для математических вычислений, сравнений, отправки на сервер и работы с бизнес-логикой приложения.
anElement.getNumber();
Где:
anElement — экземпляр AutoNumericNumber<input id="price">
const price = new AutoNumeric('#price', {
currencySymbol: '$',
digitGroupSeparator: ',',
decimalCharacter: '.'
});
price.set('12345.67');
console.log(price.getNumber());
Результат:
12345.67
Несмотря на отображение:
$12,345.67
метод возвращает чистое число.
getNumber() от getNumericString()Методы часто путают, однако между ними существует принципиальная разница.
getNumber()Возвращает:
Number
Пример:
12345.67
getNumericString()Возвращает:
String
Пример:
"12345.67"
JavaScript имеет ограничения точности чисел типа
Number.
Например:
const value = 9999999999999999;
console.log(value);
Результат:
10000000000000000
Из-за этого:
getNumber() подходит для обычных финансовых
расчётов
getNumericString() предпочтителен для:
При вызове getNumber() библиотека выполняет несколько
этапов:
Например:
€ 1.234.567,89
Удаляются:
Получается:
1234567,89
1234567.89
Number1234567.89
const amount = new AutoNumeric('#amount');
amount.set('-5432.10');
console.log(amount.getNumber());
Результат:
-5432.1
const percent = new AutoNumeric('#percent', {
suffixText: ' %'
});
percent.set('12.5');
console.log(percent.getNumber());
Результат:
12.5
Символ % автоматически исключается.
const salary = new AutoNumeric('#salary', {
currencySymbol: '₸ ',
digitGroupSeparator: ' '
});
salary.set('850000');
console.log(salary.getNumber());
Результат:
850000
Одно из главных преимуществ getNumber() — немедленная
готовность значения к арифметическим операциям.
const price1 = an1.getNumber();
const price2 = an2.getNumber();
const total = price1 + price2;
console.log(total);
const balance = income.getNumber() - expense.getNumber();
const tax = amount.getNumber() * 0.12;
const average = total.getNumber() / count.getNumber();
Поскольку метод возвращает тип Number, проявляются
стандартные особенности IEEE 754.
Пример:
const a = 0.1;
const b = 0.2;
console.log(a + b);
Результат:
0.30000000000000004
То же возможно и при использовании getNumber():
const total =
field1.getNumber() +
field2.getNumber();
const result = Number(
(field.getNumber() * 1.15).toFixed(2)
);
Например:
const value = new Decimal(field.getNumericString());
Такой подход безопаснее для финансовых приложений.
nullВ некоторых конфигурациях пустое поле может возвращать
null.
Пример:
const value = anElement.getNumber();
console.log(value);
Результат:
null
Это зависит от настроек:
emptyInputBehavior
nullconst value = amount.getNumber();
if (value !== null) {
console.log(value * 2);
}
NaNНекорректные данные могут привести к:
NaN
Проверка:
const value = anElement.getNumber();
if (Number.isNaN(value)) {
console.log('Ошибка числа');
}
form.addEventListener('submit', () => {
const payload = {
amount: amountField.getNumber(),
tax: taxField.getNumber()
};
console.log(payload);
});
Результат:
{
"amount": 1500,
"tax": 180
}
fetch('/api/payment', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
amount: payment.getNumber()
})
});
const value = autoNumericRef.current.getNumber();
setPrice(value);
const total = autoNumericInstance.getNumber();
this.amount = total;
const amount: number = this.autoNumeric.getNumber();
const subtotal = subtotalField.getNumber();
const shipping = shippingField.getNumber();
const discount = discountField.getNumber();
const total =
subtotal +
shipping -
discount;
console.log(total);
function updateTotal() {
const total =
qty.getNumber() *
price.getNumber();
result.set(total);
}
let sum = 0;
fields.forEach(field => {
sum += field.getNumber();
});
console.log(sum);
const anElement = AutoNumeric.getAutoNumericElement('#price');
const value = anElement.getNumber();
get()get()Возвращает строку:
"1234.56"
getNumber()Возвращает число:
1234.56
getNumber()Метод особенно удобен в следующих случаях:
getNumber() использовать нежелательноМетод не рекомендуется для:
В подобных случаях безопаснее:
getNumericString()
anElement.set('12.500');
console.log(anElement.getNumber());
Результат:
12.5
Тип Number не хранит форматирование.
Большие числа могут отображаться так:
1.23e+21
getNumber() работает очень быстро, поскольку:
Метод подходит даже для:
inputconst value = anElement.getNumber();
console.log(value.trim());
Ошибка:
value.trim is not a function
Причина:
getNumber() возвращает число.
0.1 + 0.2
Проблема связана не с AutoNumeric, а с типом Number.
const total = field.getNumber() * 2;
Если поле пустое:
null * 2
const value = field.getNumber();
if (
value !== null &&
!Number.isNaN(value)
) {
console.log(value);
}
set()const current = amount.getNumber();
amount.set(current + 100);
<input id="price">
<input id="qty">
<input id="total">
const price = new AutoNumeric('#price');
const qty = new AutoNumeric('#qty', {
decimalPlaces: 0
});
const total = new AutoNumeric('#total');
function recalc() {
const result =
price.getNumber() *
qty.getNumber();
total.set(result);
}
document
.querySelector('#price')
.addEventListener('input', recalc);
document
.querySelector('#qty')
.addEventListener('input', recalc);
const amount = subtotal.getNumber();
const vat = amount * 0.12;
const finalPrice = amount + vat;
console.log(finalPrice);
const original = price.getNumber();
const discount = percent.getNumber();
const result =
original -
(original * discount / 100);
console.log(result);
const principal = loan.getNumber();
const rate = interest.getNumber();
const payment =
principal * (1 + rate / 100);
console.log(payment);
Метод getNumber() поддерживается:
и всеми современными версиями AutoNumeric.
Независимо от локали результат всегда приводится к стандартному JavaScript-числу.
Отображение:
1 234 567,89 €
Результат:
1234567.89
Отображение:
1.234.567,89 €
Результат:
1234567.89
Метод работает не напрямую с DOM-строкой, а с внутренним нормализованным представлением значения. Это позволяет:
| Ситуация | Результат |
|---|---|
$1,234.56 |
1234.56 |
12 % |
12 |
-5 000 |
-5000 |
| пустое поле | null |
| неверное значение | NaN |
12.500 |
12.5 |