• ベストアンサー

数値計算で謎

シンプルな修正ユリウス日を求めるプログラムです。試しに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>

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

No.1さんの言われるとおりです。 y,mは演算されているので数値と認識されています。 dは演算がないので文字型とみなされ、 途中結果=731916とd=1が連結されて 7319161-678912=6640249となったのですね。 試しにuの式の前にd=d-0を入れてみればきちんと動くはずです。

cieloazul
質問者

お礼

>>y,mは演算されているので数値と認識されています。dは演算がないので文字型とみなされて・・ なるほど! 本当にありがとうございます!

その他の回答 (1)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

フォームに入力された値は「文字列」なので、どこかで数値に変換してやらないといけません。 ここでは d の値が文字列であるため、   u = ~ + d - 678912; の部分で ~ と d が文字列連結されてしまい、その結果から 678912 を引くのでおかしな値になるのです。 ( - は数値演算のみの記号なので、問題は起こりません。)

cieloazul
質問者

お礼

ありがとうございます。 文字列として連結されたのですね。 大変よくわかりました。^^

関連するQ&A