"Поведение функции "round" в Python" отмечает, что раунды Python плавают следующим образом:
>>> round(0.45, 1)
0.5
>>> round(1.45, 1)
1.4
>>> round(2.45, 1)
2.5
>>> round(3.45, 1)
3.5
>>> round(4.45, 1)
4.5
>>> round(5.45, 1)
5.5
>>> round(6.45, 1)
6.5
>>> round(7.45, 1)
7.5
>>> round(8.45, 1)
8.4
>>> round(9.45, 1)
9.4
Принятый ответ подтверждает, что это вызвано двояким представлением поплавок, которое является неточным, что является логичным.
Предполагая, что Ruby floats так же неточен, как и Python, почему Ruby плавает вокруг, как человек? Обманывает ли Ruby?
1.9.3p194 :009 > 0.upto(9) do |n|
1.9.3p194 :010 > puts (n+0.45).round(1)
1.9.3p194 :011?> end
0.5
1.5
2.5
3.5
4.5
5.5
6.5
7.5
8.5
9.5