【问题标题】:parsing numbers in a javascript array解析javascript数组中的数字
【发布时间】:2010-04-05 19:36:46
【问题描述】:

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

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 的总数。我做错了什么?

【问题讨论】:

    标签: javascript arrays parsefloat


    【解决方案1】:

    (1)

    var dataSum = "";
    

    您正在将dataSum 初始化为字符串。对于字符串,+= 是一个连接运算符,所以你会因为连接而得到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;})
    

    )

    【讨论】:

    • 是否单行"dataSum += parseFloat(data[i]);" parseFloat 单个数据值?因此,例如,如果我稍后单独调用 data[3],我希望使用 parseFloat 对其进行正确格式化。还是我必须在循环中添加另一行?
    • +1 对于 ECMAScript 5 示例,我很喜欢现在有些人开始将它们放入他们的答案中:-)
    • @George:如果你以后想要data[3]作为浮点数,你需要使用parseFloat(data[3])(或者更简单的+data[3],效果差不多)。
    • 我明白了,有没有办法一次将数组中的所有值设置为浮点数,这样我每次调用值时就不必使用 parseFloat() 了?
    • @George:Jhonny 的回答解释了这一点。基本上,data[i] = parseFloat(data[i]);.
    【解决方案2】:

    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;
    }
    

    【讨论】:

      【解决方案3】:

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

      来自wcschools

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-08
        • 2021-11-05
        • 2020-06-21
        • 1970-01-01
        • 2018-03-23
        • 1970-01-01
        • 2013-04-13
        • 2011-04-22
        相关资源
        最近更新 更多