- ベストアンサー
数値計算で謎
シンプルな修正ユリウス日を求めるプログラムです。試しに2004年1月1日を求めると、誤った値「6640249」が出力されます。試行錯誤の結果、functionの中身、uに数値を代入する文(原文では改行されていません)で、dをMath.floor(d)に変えると正しい値「53005」が出力されました。この理由が全くわかりません。また、6640249はどのように計算された値でしょうか?ブラウザはIE6とLunascape2を使用です。 <html> <head> <title>myJulianday</title> <script type="text/JavaScript"> <!-- function myFuncJulianday(){ y=document.form1.input1.value; m=document.form1.input2.value; d=document.form1.input3.value; if(m==1){ m=13; y=y-1; } if(m==2){ m=14; y=y-1; } u=Math.floor(365.25*y)+Math.floor(y/400)-Math.floor(y/100)+Math.floor(30.59*(m-2))+d-678912; document.form1.input4.value=u; } //--> </script> </head> <body> <form type="text" name="form1"> <input type="text" name="input1" size="10">年 <input type="text" name="input2" size="10">月 <input type="text" name="input3" size="10">日 <input type="button" size="20" value="ユリウス日を表示" onClick="myFuncJulianday()"> <input type="text" name="input4" size="10"> </form> </body> </html>
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1さんの言われるとおりです。 y,mは演算されているので数値と認識されています。 dは演算がないので文字型とみなされ、 途中結果=731916とd=1が連結されて 7319161-678912=6640249となったのですね。 試しにuの式の前にd=d-0を入れてみればきちんと動くはずです。
その他の回答 (1)
- leaz024
- ベストアンサー率75% (398/526)
フォームに入力された値は「文字列」なので、どこかで数値に変換してやらないといけません。 ここでは d の値が文字列であるため、 u = ~ + d - 678912; の部分で ~ と d が文字列連結されてしまい、その結果から 678912 を引くのでおかしな値になるのです。 ( - は数値演算のみの記号なので、問題は起こりません。)
お礼
ありがとうございます。 文字列として連結されたのですね。 大変よくわかりました。^^
お礼
>>y,mは演算されているので数値と認識されています。dは演算がないので文字型とみなされて・・ なるほど! 本当にありがとうございます!