Javascript 底层 toString 转换

Javascript under-the-hood toString conversion

我有以下功能:

function addChange(result, bill) {
  for (var i=0;i<result.length;i++) {
    if (result[i][0] === bill[0]) {
      result[i][1] = parseFloat(result[i][1]).toPrecision(2) + parseFloat(bill[1]).toPrecision(2);
      return result;
    }
  }
  result.push(bill);
  return result;
}

调用如下,例如:

result = [["QUARTER", 0.25],["DIME", 0.10]];
bill = ["QUARTER", 0.25];
addChange(result, bill);

上面的输出是:

[["QUARTER", "0.250.25"], ["DIME", 0.10]] 

为什么 javascript 在进行加法运算之前将这些浮点数转换为字符串?还是有其他事情发生?我怎样才能超越它并实现我想要的,即上面的例子:

[["QUARTER", 0.50], ["DIME", 0.10]]

来自 mdn 文档 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Number/toPrecision

Returns

表示数字对象的字符串,采用四舍五入到精确有效数字的定点或指数表示法。请参阅 Number.prototype.toFixed() 方法的说明中关于舍入的讨论,它也适用于 toPrecision()。

问题是:

floatNumber.toPrecision(2)

这会根据您的号码创建一个字符串。 toPrecision 函数用于创建具有固定位数的 表示