まつもと ゆきひろです

In message "[ruby-list:30301] round の仕様"
    on 01/06/19, Shin-ichi TAKAYA <takaya / tsi.co.jp> writes:

|題記、roundの仕様について質問があるのですが、
|
|puts 23.49999999999999999999999999.round
|
|の結果は、24になります。roundはselfに最も近い整数を返すとい
|うruby本、及びWEBのリファレンスからすると、23が帰ってきて欲
|しいのですが、これは仕様でしょうか?

  puts 23.49999999999999999999999999

あるいは

  printf "%20.20f\n", 23.49999999999999999999999999

してみてください。つまり、浮動小数点数の誤差により、この数値
は23.5とみなされ、+0.5すると24になってしまうのです。浮動小数
点数の場合、みかけと実際の数値はさまざまな理由(ほとんどは2
進数表現による誤差)により、異なります。