引擎盖下的Javascript到字符串转换
我有以下功能:引擎盖下的Javascript到字符串转换,javascript,string,floating-point,addition,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; } }
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;
}
上面的输出是:
[["QUARTER", "0.250.25"], ["DIME", 0.10]]
为什么javascript在进行加法之前会将这些浮点数转换为字符串?还是有别的事情发生了?我如何超越它并实现我想要的,例如,对于上述示例:
[["QUARTER", 0.50], ["DIME", 0.10]]
来自mdn文档 返回 以定点或指数表示法表示数字对象的字符串,四舍五入为精确有效数字。请参阅Number.prototype.toFixed()方法描述中关于舍入的讨论,该方法也适用于toPrecision()。问题是:
floatNumber.toPrecision(2)
这将根据您的号码创建一个字符串。
toPrecision
-函数用于创建数字的固定位数表示形式。使用Math.round(parsedFloat*100)/100
@Shashank这就是你如何强迫javascript精确处理任何2位十进制精度的浮点数的方法吗?我会使用toFixed
/toPrecision
然后是cast to number类型和Math.round
与乘法和除法之间速度更快的方法。我还没有测试性能,所以我不确定哪种方法更好。
floatNumber.toPrecision(2)