とーますメモ

Ruby on Rails / Goなどの学習メモ

【Ruby】Rubyバージョンが影響して、小数点計算が合わなくなることがある

以下の記事を見るとどうやらrubyのバージョンが2.4未満だとround関数が正しい値を返さないことがあるらしい。

irb(main):001:0> 1024.975.round(2)
=> 1024.97
irb(main):002:0> 1023.975.round(2)
=> 1023.98

Ruby - roundで四捨五入にならない場合の理由を教えてください|teratail
RubyとPythonとC#のround関数のバグっぽい挙動について - hnwの日記
floating point - Ruby Float#round behaviour change after update - Stack Overflow


以下の記事によると2.4未満のバージョンを利用しているときは、BigDecimalでroundすれば良さげ。

irb(main):001:0> BigDecimal('1024.975').round(2).to_f
=> 1024.98

floating point - Float round bug in ruby? - Stack Overflow