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
函数用于创建具有固定位数的 表示。
我有以下功能:
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
函数用于创建具有固定位数的 表示。