JavaScript如何对class为money的HTML元素数值求和避免字符串拼接
问题根因
toFixed()方法返回值为字符串类型,JS中数值和字符串执行+=运算时,会自动将数值转为字符串后做拼接,而非你期望的数值加法,这就是最终结果是数字拼接的核心原因。- 你代码中声明的
arr变量未参与任何逻辑,属于冗余变量,可以直接删除,用elements.length作为循环终止判断条件即可。
解决方案
推荐在累加阶段全部使用数值类型运算,最终输出时再统一做小数位格式化,避免中间多次类型转换和精度损失,修正后代码如下:
var elements = document.getElementsByClassName("money"); var total = 0; for (var i = 0; i < elements.length; i++){ var val = elements[i].innerHTML; // 仅做数值累加,不做格式化 total += parseFloat(val); } // 最终结果统一保留2位小数 total = total.toFixed(2); console.log(total);
如果确实需要每一步累加都强制保留两位小数,可以将toFixed的结果强制转为数值类型后再累加(不推荐,高频运算场景下容易出现浮点精度误差):
total += Number(parseFloat(val).toFixed(2));
内容的提问来源于stack exchange,提问作者Alcinos
相关产品推荐
相关产品推荐

