Сумма 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}`)

Другие вопросы по тегам