我有一个很蹩脚的问题。但是我不知道如何解决它。
我试图在一个循环中添加两个浮点数(例如: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));
};
最初警报返回数字。
我觉得你太过分了。
范围是: +/- 9007199254740992
ECMA Section 8.5 -数字
你可以试着只得到数字和,
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);
}
如果你将参数传递给GCDistance类作为float或Integer,你必须解析它们以获得正确的ans,
latArray[i],lonArray[i],latArray[i+1],lonArray[i+1]
(注意:确保值在latArray,ionArray,latArray和ionArray中存在)
这个(或者至少一个)问题可能是juvian在注释中指出的问题:
latArray[i+1]将[result in undefined] at last index [..]
当undefined
值用于数学表达式时,将其转换为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 < latArray.length-1
,这样latArray[i+1]
总是在数组的范围内的索引访问,尽管您必须检查这是否正确。