Chienomi

「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 / 36001なので1時間。 (5400 % 3600) / 6030なので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日」とかのほうが絶対に良い。