2014-05-16 68 views
1

我有一個非常蹩腳的問題。但我不知道如何解決它。總結退貨NaN

我想在循環中添加兩個浮點數(例如: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。

+0

數字有多大?你是否溢出了數字的大小? –

+0

什麼是s ????? –

+0

s是一個浮點數。例如。 s = 1.0583389964654335。 –

回答

0

我認爲你正在越過這個範圍。

範圍是:+/- 9007199254740992

ECMA Section 8.5 - Numbers

+0

我該如何解決? –

+0

https://github.com/jtobey/javascript-bignum –

+1

超出範圍會導致InF,而不是NaN - 同樣,這是「連續整數精度範圍」範圍,而不是最大範圍2^1023!例如請參閱'Math.pow(2,1023)'和'2 * Math.pow(2,1023)'。 – user2864740

0

你可以試試這個只得到數字總和,

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級浮法或整數,你必須解析它們以得到正確的答案,

latArray[i],lonArray[i],latArray[i+1],lonArray[i+1] 

(注:請確保值是存在於latArray,ionArray,latArray和ionArray)

+0

我查過了。每次s返回一個合適的浮點數。它發生在另外 –

+0

然後這將是循環的實際問題,你應該運行循環直到latArray.length-1 –

+0

我也試過。但沒有運氣 –

-1

的(或至少一個)問題可能是由juvian在評論中指出的問題:

latArray第[i + 1]將[導致未定義]在最後一個索引[..]

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]始終是內的數組邊界的索引訪問,但你必須檢查這是否正確。

+0

我發現這個問題,Math.acos(1.0000000000000002)返回NaN,這是問題 –

+0

@ErmaIsabel這確實是個問題!很高興你解決了它。 – user2864740

+0

我沒有解決它。我很困惑怎麼辦 –