Float#to_i で安易な切り捨てを期待しないようにした。

2013/12/30

pryで遊んでいたときの個人的なメモです。 分かっている方には「そりゃそうだ」という話かもしれません。 おそらくプログラミングに共通する「前提知識」みたいなものが、 僕自身から欠落しているからこのような疑問を抱くんだろうな、と考えた次第です。

[18] pry(main)> 10.9999999999999991118215802.to_i
=> 10
[19] pry(main)> 10.9999999999999991118215803.to_i
=> 11
[20] pry(main)> '10.9999999999999991118215803'.to_i
=> 10

上記は切り捨てを期待したものです。 しかし小数点以下の値がある点を越えた場合にFloat#to_iは(切り捨てを行わない、という意味においては)期待はずれの挙動が見られました。 切り捨てたいならFloat#truncateとか使えばいいんだろうな。 c [29] pry(main)> 10.9999999999999991118215802.truncate => 10 [30] pry(main)> 10.9999999999999991118215803.truncate => 11

上記実行の結果から以下のことが言えるのかなと考えました。 ・切り捨てたい場合には、小数点以下有効桁数を設定する