Javascript under-the-hood toString转换

时间:2015-06-29 12:24:58

标签: javascript string floating-point addition

我有以下功能:

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]]

2 个答案:

答案 0 :(得分:5)

问题是:

floatNumber.toPrecision(2)

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

答案 1 :(得分:4)

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

返回

以定点或指数表示法表示Number对象的字符串,舍入为精确有效数字。请参阅Number.prototype.toFixed()方法描述中的舍入讨论,该方法也适用于toPrecision()。