プロが教えるわが家の防犯対策術!

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

A 回答 (2件)

No.1さんの言われるとおりです。



y,mは演算されているので数値と認識されています。
dは演算がないので文字型とみなされ、
途中結果=731916とd=1が連結されて
7319161-678912=6640249となったのですね。

試しにuの式の前にd=d-0を入れてみればきちんと動くはずです。
    • good
    • 0
この回答へのお礼

>>y,mは演算されているので数値と認識されています。dは演算がないので文字型とみなされて・・

なるほど!
本当にありがとうございます!

お礼日時:2005/06/01 22:18

フォームに入力された値は「文字列」なので、どこかで数値に変換してやらないといけません。



ここでは d の値が文字列であるため、
  u = ~ + d - 678912;
の部分で ~ と d が文字列連結されてしまい、その結果から 678912 を引くのでおかしな値になるのです。
( - は数値演算のみの記号なので、問題は起こりません。)
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/06/01 22:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!