-3

我正在尝试获取文本框中所有整数的总和。数字用逗号分隔。我需要将数字相加并得到它们的总和。遗憾的是,我无法得到它们。

我的代码是:

 <script type="text/javascript">
        function computeData()
        {
            var data = document.getElementById("data").value;
            var temp = data.split(",");
            for( i=0; i<temp.length; i++)
            var k=0;
            {
                var j = temp[i];
                k  = k + j;
                alert(k);
            }
            document.getElementById("sum").value= k;
        }
    </script>
4

6 回答 6

3

您需要使用以下方法将字符串解析为整数parseInt

> 2 + '3'
'23'
> 2 + parseInt('3', 10)
5

10告诉parseInt假设该数字是基数为 10 。如果您有浮点数,请使用parseFloat()(您不需要指定基数):

> 2 + parseFloat('3.13')
5.13
于 2013-03-07T02:40:10.107 回答
1

如果您知道它们将是整数:

var data = document.getElementById("data").value;
var sum = data.split(",").reduce(function(prev, curr){
    return parseInt(prev,10) + parseInt(curr,10);
 });

如果您不确定整数,您可以使用parseFloat它来代替 parseInt。

请注意,这可能不适用于旧版浏览器。如果您需要支持早于 IE9 的 IE,您可能只想在循环中按原样使用 parseInt/parseFloat。(将 k 声明移到循环外)

var k=0;
for( i=0; i<temp.length; i++)
{
     var j = temp[i];
     k  = k + parseInt(j,10);
     alert(k);
}
于 2013-03-07T02:41:53.793 回答
0

考虑:

var data = '1,2,3';

eval(data.split(',').join('+'))); // 6

或者

eval(data.replace(/,/g,'+')); // 6

编辑

对于所有那些讨厌 eval 的人(你知道你是谁!!):

var sum = data.split(',').reduce(function(p, c){return p + +c},0);

请注意,需要对ES5 reduce的支持,MDN 上有一个polyfill

于 2013-03-07T03:12:21.423 回答
0

我喜欢 eval 的想法,但您也可以使用正则表达式来匹配和汇总整数和小数,以及任何加号或减号。非数字将被忽略,因此您可以使用逗号或空格分隔,或者仅在数字之间使用“+”或“-”。

function computeData(){
    var data= document.getElementById("data").value;
    var rx=/([+-]?(\.\d+|\d+(\.\d+)?))/g, n= 0, M;
    while((M= rx.exec(data))!= null){
        n+= (+M[1])
    }
    document.getElementById("sum").value= n;
}
于 2013-03-07T04:46:55.900 回答
0

这可能适用于整数或浮点数的 CSV 字符串。

var data = document.getElementById("data").value;
var a = data.match(/\d+(?:[.]\d+)?/g);
var num = 0;
a.forEach(function(n){
    num += parseFloat(n);
});

console.log(num);
于 2013-03-07T02:55:12.607 回答
0

我可能还会建议以下语法

        var temp = data.split(",");
        for(var i=0, k=0; i<temp.length; i++;)
        {
            k += parseInt(temp[i]);
        }
于 2013-03-07T02:55:23.730 回答