所以我有一个名为hoursString的字符串,看起来像
4.3|2.4|3.4|3.0|2.64|3.0|1.0|0.0|2.6|3.4|
我将字符串拆分成一个数组,我想要做的就是将所有数字相加并将其返回到div中的html页面" test"。
JAVASCRIPT:
var hours=hoursString.split("|");
var total=0;
for (var i=0;i<hours.length;i++)
{
total += hours[i];
}
document.getElementById("test").innerHTML=total;
结果是NaN。有人能告诉我我做错了什么吗? 谢谢!
答案 0 :(得分:2)
4.3|2.4|3.4|3.0|2.64|3.0|1.0|0.0|2.6|3.4|
删除最后一个|,否则将在数组末尾添加一个空字符串,这将使NaN和NaN +数值计算为NaN
编辑:是的,parseFloat也是必要的,否则结果将是一个字符串而不是NaN
答案 1 :(得分:1)
var hoursString = "4.3|2.4|3.4|3.0|2.64|3.0|1.0|0.0|2.6|3.4|",
hours = hoursString.split("|"),
total = 0;
for (var i = 0; i < hours.length; i++) {
total += parseFloat(hours[i]) || 0; // see explanation
}
document.getElementById("test").innerHTML = total;
为什么|| 0
?因为它检查字符串是否为""
,如果是,||
操作数将返回第二个值,在本例中为0
。
这将输出25.740000000000002
。请参阅this answer有关“错误”结果的原因,here is是一个工作小提琴。
答案 2 :(得分:0)
您的问题是,以小时为单位的每个元素仍然是字符串值,即使它被写为数字。解决这个问题的最简单方法是使用javascripts parseFloat()函数。
示例:
var hours=hoursString.split("|");
var total=0;
for (var i=0;i<hours.length;i++)
{
total += parseFloat(hours[i]);
}
document.getElementById("test").innerHTML=total;
编辑:从parseInt
更改为parseFloat
答案 3 :(得分:0)
var hoursString = "4.3|2.4|3.4|3.0|2.64|3.0|1.0|0.0|2.6|3.4|"
var hours=hoursString.split("|");
var total=0;
var idx = 0;
for(idx in hours) {
total += +hours[idx];
}
alert(total);