尝试添加数组,但结果返回NaN

时间:2013-06-11 20:33:19

标签: javascript html add nan

所以我有一个名为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。有人能告诉我我做错了什么吗? 谢谢!

4 个答案:

答案 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);

FIDDLE