「1.5時間」を取り扱うプログラム
プログラミング::beginners
序
時間の基数がバラバラ、というのはプログラミングでは定番の話題なんだけれども、それについて特にちゃんと考えたことがなかったので初心者向けの題材として軽くトーク。
1.5時間ならまだすぐ出るけど、1.3時間とか言われると難しいかもしれない。 あと、1.18日とか。
「時間」の小数
1.5時間というのは、1時間30分のこと。
単純にこれを見ると1未満をt / (1 / n)
すれば良いように思えるけど、これは扱いにくい。
手っ取り早いのは「秒」を単位にする方法。
1時間は3600秒。0.5時間は1800秒。
つまり、t * 3600
で単純に秒に変換できる。
1.5時間は5400秒(1.5 * 3600 == 5400
)。
5400 / 3600
は1
なので1時間。
(5400 % 3600) / 60
は30
なので30分。
(5400 % 60)
は0
なので0秒。
1.1235時間だと1.1235 * 3600 == 4044.6
で、1時間7分24秒6。1秒未満は10進法なので余りの小数はそのまま小数でいい。
「日数」の小数
1.5日は1日と12時間。
こちらも病に換算でき、24時間である86400
秒で割るフェーズを追加すれば良し。
1.19633日は
(1.19633 * 86400) / 86400
=> 1日((1.19633 * 86400) % 86400) / 3600
=> 4時間((1.19633 * 86400) % 3600) / 60
=> 42分((1.19633 * 86400) % 3600) % 60
=> 42.912秒
逆は…?
もちろん、同様の計算で逆にもできるけど、「1.337日」とか言われても具体的な時間はみんなわからないので、「約1日」とかのほうが絶対に良い。