Javascript 求和返回NaN

Javascript 求和返回NaN,javascript,nan,Javascript,Nan,我有一个很蹩脚的问题。但我不知道怎么解决它 我试图在一个循环中添加两个float numberseg:1.0583389964654335,长度为1500 var distance = 0; for(var i = 0;i< latArray.length;i++) { var s = GCDistance(latArray[i],lonArray[i],latArray[i+1],lonArray[i+1]); distance =

我有一个很蹩脚的问题。但我不知道怎么解决它

我试图在一个循环中添加两个float numberseg:1.0583389964654335,长度为1500

    var distance = 0;
    for(var i = 0;i< latArray.length;i++)
    {
        var s = GCDistance(latArray[i],lonArray[i],latArray[i+1],lonArray[i+1]);
        distance = parseFloat(distance) + parseFloat(s);

        alert(distance);    
    }


        var radius = 6378137.0 ; // earth radius
        var DE2RA = 0.01745329252; // degre to radian conversion

        GCDistance= function (lat1, lon1, lat2, lon2) {
            //console.log(lat1, lon1, lat2, lon2);
            if (lat1 == lat2 && lon1 == lon2) return 0;
            lat1 *= DE2RA;          
            lon1 *= DE2RA;
            lat2 *= DE2RA;
            lon2 *= DE2RA;
            var d = Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon1 - lon2);
            if(isNaN(radius * Math.acos(d)))
            {
                console.log(lat1, lon1, lat2, lon2);
            }
            //console.log((radius * Math.acos(d)));
            return (radius * Math.acos(d));
        };

最初,警报返回数字。在某个极限后,它变为NaN。

我想你已经越过了这个范围

范围为:+/-9007199254740992


你可以试试这个,只得到数字和

var distance = 0;
for(var i = 0;i< (latArray.length-1);i++)
{
    var s = GCDistance(latArray[i],lonArray[i],latArray[i+1],lonArray[i+1]);
    distance = parseFloat(distance) + parseFloat(s);

    alert(distance);    
}

注意:确保latArray、Onarray、latArray和Onarray中存在值,或者至少有一个问题可能是juvian评论中指出的问题:

latArray[i+1]将[导致未定义]在最后一个索引[…]

在数学表达式中使用未定义的值时,会将其转换为NaN。然后,此NaN将通过其余的数学操作传播

下面是这种行为的演示

var x = +undefined  // NaN -> x, as +expr results in [ToNumber(expr)]
2 + x               // 2 + NaN -> NaN, as NaN "contaminates" every math operator

建议只循环到i数字有多大?您是否溢出了数字的大小?s是一个浮点数。例如,s=1.0583389964654335。latArray[i+1]将在最后一个索引处抛出NaN或undefined,将var i=0;ivar x = +undefined // NaN -> x, as +expr results in [ToNumber(expr)] 2 + x // 2 + NaN -> NaN, as NaN "contaminates" every math operator