1

我有以下代码计算并显示两个值的总和。

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>€&lt;/span>'+new_price);
  } else {
    $('.product-detail .woocommerce-Price amount.amount').html('<span>€&lt;/span>'+oldprice_formated);
  }

例如:

oldprice_formated = parseFloat(49.99).toFixed(2);
extraPrice = parseFloat(3.00).toFixed(2)

预期结果:总和为 52.99

实际结果:总和为 49.003.00

我究竟做错了什么?我假设它与数字解析有关,但不确定我应该更改什么以使其正常工作。谢谢!

4

2 回答 2

3

.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()在将那些已经解析为浮点数的值相加之后运行。

于 2018-03-28T19:13:22.403 回答
0

因为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}`)

于 2018-03-28T19:22:11.920 回答