プロが教える店舗&オフィスのセキュリティ対策術

下記はuwscの自作タイマープログラムの一部です

timer[2]=GETTIME() + 10 * 60



FUKIDASI("2番("+INT((timer[2]-GETTIME())/3600,0)+":"+INT((timer[2]-GETTIME())/60 MOD 60,0)+":"+INT((timer[2]-GETTIME()) MOD 60,0)+")")

といった感じでプログラムを組んだのですが、時、分の所で3捨4入してしまうようで正しく表示されません。
INTは小数切捨てらしいのですが…
どうすれば正しく時間を表示できるでしょうか?

A 回答 (3件)

回答No.1です。

チェックが甘かったようで、大変失礼しました・・・

MODの仕様のせいであれば、INTに食わせるのを計算結果全体ではなく、60で割った結果だけにすれば、確実に小数点以下は切り捨てにできます。今回の場合は剰余は整数部だけあればよいので、事前に小数部を削っておくことで所望の結果が得られます。以下の式なら、31秒で分が繰り上がる現象が出ないのは確認しました。

print "2番("+INT((GETTIME()-timer[2])/3600,0)+":"+INT((GETTIME()-timer[2])/60,0) MOD 60+":"+INT((GETTIME()-timer[2]) MOD 60,0)+")"
    • good
    • 0

UWSCは分かりませんが、


>3捨4入してしまう
ということなので、もしかしたら MOD 関数が銀行型丸め(偶数丸め)を
行っているのでは?
1.5 MOD 10 → 2
2.5 MOD 10 → 2
3.5 MOD 10 → 4
4.5 MOD 10 → 4
となりませんかね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
その推測は当たりのようですね

お礼日時:2014/05/07 20:02

timer[2]=GETTIME() + 10 * 60 ですが、これって10 * 60が先に評価されちゃうけどいいんですか?まさかそれだけのオチ?



時分秒を求める式は、それで合っているはずです。以下の実験コードでも、正常に現在時刻を示しますから。

dim timer[2]
timer[2]=GETTIME(0,"2014/05/06 00:00:00")
print "2番("+INT((GETTIME()-timer[2])/3600,0)+":"+INT((GETTIME()-timer[2])/60 MOD 60,0)+":"+INT((GETTIME()-timer[2]) MOD 60,0)+")"

この回答への補足

回答ありがとうございます
実験コードも正常に時刻表示されませんね

例えば、
0:0:30
の1秒後が
0:1:31と表示されたりしますし

補足日時:2014/05/07 19:58
    • good
    • 0

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