Сумма toFixed не работает правильно
У меня есть следующий код, который рассчитывает и показывает сумму двух значений.
var oldprice_formated = parseFloat(oldprice).toFixed(2);
var extraPrice = parseFloat(3).toFixed(2);
if(initials != '') {
var new_price = oldprice_formated + extraPrice;
$('.product-detail .woocommerce-Price-amount.amount').html('<span>€</span>'+new_price);
} else {
$('.product-detail .woocommerce-Price amount.amount').html('<span>€</span>'+oldprice_formated);
}
Например:
oldprice_formated = parseFloat(49.99).toFixed(2);
extraPrice = parseFloat(3.00).toFixed(2)
Ожидаемый результат: сумма 52,99
Фактический результат: сумма 49,003,00
Что я делаю неправильно? Я предполагаю, что это с разбора числа, но не уверен, что я должен изменить, чтобы это работало правильно. Спасибо!
2 ответа
.toFixed()
возвращает строку, а не число только с двумя десятичными знаками.
oldprice_formated = parseFloat(49.99).toFixed(2); // "49.99"
extraPrice = parseFloat(3.00).toFixed(2); // "3.00"
При добавлении этих двух переменных вместо числовой суммы вы объединяете две строки:
"49.99" + "3.00"; // "49.993.00"
Я считаю, что это то, что вы хотите сделать:
var new_price = parseFloat(oldprice_formated) + parseFloat(extraPrice);
Или просто беги .toFixed()
после того, как вы суммируете те значения, которые уже были проанализированы с плавающей точкой.
Так как toFixed()
возвращает строку, +
Оператор действует как конкатенация строк. Если вы хотите, чтобы он работал как оператор сложения, вы должны ввести значения в виде чисел:
let oldprice = 49.99;
let oldprice_formatted = parseFloat(oldprice).toFixed(2);
let extraPrice = parseFloat(3).toFixed(2);
console.log(`string concatenation: ${oldprice_formatted + extraPrice}`)
console.log(`type conversion: ${+oldprice_formatted + +extraPrice}`)