1秒毎にカウントダウンするプログラムを作成中です。
例えば残り時間が分の切り替わりの1時間1分0秒になった時に3660000ミリ秒ではなく3659999ミリ秒のように誤差が発生した場合うまく行きません。
JavaScript
1 let t = 3659999;//残り時間ミリ秒 2 3 let h = Math.floor(t / 3600000);//時間 4 let m = Math.floor((t - h * 3600000) / 60000);//分 5 let s = Math.round((t - h * 3600000 - m * 60000) / 1000);//秒 6 console.log(h + "時間" + m + "分" + s + "秒");//1時間0分60秒 7 8 s = Math.floor((t / 1000) % 60);//秒 9 m = Math.floor((t / 1000 / 60) % 60);//分 10 h = Math.floor((t / 1000 /60 /60) % 24);//時間 11 console.log(h + "時間" + m + "分" + s + "秒");//1時間0分59秒
残り時間に100ミリ秒など誤差分を足す方法しか思いつかないのですが、他の方法はありますでしょうか?
結局 t = 3659999はなんと表示されればよいのでしょうか?
うまくいかないとはどうなるんでしょうか
1時間1分0秒と表示したいです。
1時間0分60秒あるいは1時間0分59秒と表示されます。
ただし分の切り替えでは無い時には問題ありません。
あらかじめtを処理するのが効率的です
回答の方を参考にしてください
個人的には「1時間0分59秒」は妥当のように思えるのですが、yoshimatsuさんはどのように表示したいのですか?
1時間1分0秒と表示したいです。
3659941 の場合はどうなりますか? 3659971 は?
どちらの場合も1時間1分0秒と表示したいです。
ああ、いや、間違いました。すみません。
3659001 と 3659501 の時はどうですか?
3659001は1時間0分59秒、3659501は1時間1分0秒です。
3659501までのズレは無いようにしたいと思っています。
> 3659501までのズレ
四捨五入から考えると
3659499=3659000
3659500=3660000
ですよね?
でも0.5秒は誤差というには無理があります。考え直したほうがよいです
では、現在ついているご回答で問題は特にないのですね。わかりました。
四捨五入だと残り 1.5 秒で 1 になり、残り 0.5 秒で 0 になりますね。1 時間以上かかる仕事なので、画面が切り替わるのであれば好みの問題かなとは思いました。人間がカウントする時には 0 になった後に何かを始めるのにいくばくかの間が空くと思いますので。
ただし内容によってはこの間を気持ち悪いと思う人もいると思います。画面を凝視していて、残り 0 秒でわずかでも停止したら、そこで肩透かしを食らわされたように思う人もいるでしょう。
回答3件
あなたの回答
tips
プレビュー