3

嗨,我有一串用逗号分隔的数字,“100,200,300,400,500”,我使用 javascript split 函数将其拆分为一个数组:

var data = [];
data = dataString.split(",");

我正在尝试使用 parseFloat 解析数组的值,然后将它们存储回数组中。然后我想将数组中的数字相加并将其存储为另一个变量“dataSum”。

我有以下代码,但我无法让它工作:

var dataSum = "";

for (var i=0; i < data.length; i++) {
    parseFloat(data[i]);
    dataSum += data[i];
}

因此,在这一切结束时,我应该能够单独访问任何已解析的数字 data[0]、data[1] 等......并获得 dataSum 的总数。我究竟做错了什么?

4

3 回答 3

10

(1)

var dataSum = "";

您正在初始化dataSum为字符串。对于字符串, the+=是一个连接运算符,所以你会100200300400500因为连接而得到。您应该将其初始化为 0:

var dataSum = 0;

(2)

parseFloat不修改输入参数。返回浮点值。所以你应该使用

dataSum += parseFloat(data[i]);

(3)

var data = [];
data = dataString.split(",");

第二个分配将覆盖第一个。写吧

var data = dataString.split(",");

(顺便说一句,ECMAScript 5 支持这种单行:

return "100,200,300,400,500".split(/,/).map(parseFloat).reduce(function(x,y){return x+y;})

)

于 2010-04-05T19:38:58.507 回答
6

parseFloat 返回一个值,您应该使用它来进行计算,此外,您应该将 dataSum 变量初始化为数值。

var dataSum = 0;

for (var i=0; i < data.length; i++) {
    var current = parseFloat(data[i]);
    dataSum += current;
    // to save back onto array
    // data[i] = current;
}
于 2010-04-05T19:38:59.757 回答
2

您正在使用parseFloat但未将结果分配给任何东西。

来自wcschools

parseFloat() 函数解析一个字符串并返回一个浮点数。

此外,将数字添加到字符串将连接结果,因此您应该将您的默认设置dataSum为 0,而不是"".

var dataSum = 0.0;

for (var i=0; i < data.length; i++) {
    dataSum += parseFloat(data[i]);
}
于 2010-04-05T19:37:48.237 回答