2012-06-20 2 views
1

У меня возникла проблема получить числовое значение для этого выражения, где я пытаюсь рассчитать часы дневного света, используя эту формулу. Его окончание дает NaN, когда я оцениваю это выражение.Расчет дневных часов

J стенд на юлианский день. (например, для сегодня J = 172;)

Любая помощь будет весьма ценным, Благодаря

P = Math.asin(0.39795*Math.cos(0.2163108 + 2*Math.atan(0.9671396*Math.tan[0.00860*(J-186)]))); 
+0

В таких ситуациях, когда у меня есть проблемы, я всегда разделите код на несколько строк, чтобы избежать путаницы, как ваш случай. Попробуйте, и вы увидите, откуда происходит «ошибка». –

+0

@ NunoGonçalves..и сделал, его приход из этой части "* Math.tan [0.00860 * (J-186)]" – Kunal

+0

Возможно, есть проблема с J ... Удостоверьтесь, что он возвращает хорошее значение ... – LolCat

ответ

1

Я попробовал и получил ответ ...:

P = Math.Asin(0.39795 * Math.Cos(0.2163108 + 2 * Math.Atan(0.9671396 * Math.Tan(0.00860 * (J- 186))))); 

I изменено "[" до "(" в Math.tan [0.00860 * (J-186)])))

И я получил результат ... (Чтобы проверить это, я изменил J до 172)

Убедитесь, что P является Double

0
//GET LATITUDE 
      latitude = document.getElementById("latit").value; 
      L = latitude; 

      //GET JULIAN DAY 
       Now=new Date(); 
       Now_Y=Now.getYear(); 
       if (Now_Y < 70) { Now_Y=Now_Y*1+2000; } 
       if (Now_Y < 1900) { Now_Y=Now_Y*1+1900; } 
       Now_M=Now.getMonth();      // Jan-Dec = 0-11 
       Now_D=Now.getDate();      // 1-31 
       Now_H=Now.getHours();      // 0-23 
       Now_N=Now.getMinutes();     // 0-59 
       Now_S=Now.getSeconds();     // 0-59 
       Now_U=Now.getMilliseconds();    // 0-999 
       Now_T=Now.getTime();      // miliseconds since 1970-01-01 
       Now_O=Now.getTimezoneOffset();   // in minutes 
       Now_W=Now.getDay();      // weekday: Sun-Sat = 0-6 
       Now_J=         // day of year (Julian day) 
       Math.round((       // ...account for DST 
       (new Date(Now_Y,Now_M,Now_D))   // ...most recent midnight 
       - (new Date(Now_Y,0,0)))    // ...Dec. 31st midnight 
       /86400000);        // ...mili-seconds per day 
       Gmt_N=Now_N+Now_O; 
       Gmt=new Date(Now_Y,Now_M,Now_D,Now_H,Gmt_N,Now_S); 
       Gmt_Y=Gmt.getYear(); 
       if (Gmt_Y < 70) { Gmt_Y=Gmt_Y*1+2000; } 
       if (Gmt_Y < 1900) { Gmt_Y=Gmt_Y*1+1900; } 
       Gmt_M=Gmt.getMonth();      // Jan-Dec = 0-11 
       Gmt_D=Gmt.getDate();      // 1-31 
       Gmt_J=         // day of year (Julian day) 
       Math.round((       // ...account for DST 
       (new Date(Gmt_Y,Gmt_M,Gmt_D))   // ...most recent midnight 
       - (new Date(Gmt_Y,0,0)))    // ...Dec. 31st midnight 
       /86400000);        // ...mili-seconds per day 
       alert("Julian Day: "+Gmt_J); 

      J = Gmt_J; 

      P = Math.asin(0.39795*Math.cos(0.2163108 + 2*Math.atan(0.9671396*Math.tan(0.00860*(J-186))))); 

      alert("P is : "+P) 

      pi = 3.14159265; 

      var D = 24 - (24/pi)*Math.acos((Math.sin(0.8333*pi/180) + Math.sin(L*pi/180)*Math.sin(P))/ (Math.cos(L*pi/18 

0)*Math.cos(P))); 
Смежные вопросы