Round floats to the nearest X
For those pesky times when whole numbers just won’t cut it, but you only want some precision.
7.7.round(0.5) #=> 7.5
7.95.round(0.5) #=> 8
8.2.round(1.5) #=> 7.5
8.3.round(1.5) #=> 9
The magic, courtesy of Daniel Morrison:
class Float
def round(round_to = 1.0)
mod = self % round_to
rounded = self - mod + (mod >= round_to/2.0 ? round_to : 0)
rounded % 1 == 0 ? rounded.to_i : rounded
end
end
Note that do to some quirks with Ruby’s handling of floats, you won’t get what you expect in some situations:
3.5.round(0.2) #=> 3.4, instead of 3.6
This content is open source.
Suggest Improvements.