Converting values to an Integer, Float or BigDecimal (or even Rational) in Ruby sometimes comes with an unwelcome side effect: that
nil responds to
#to_r by returning a class-appropriate zero value.
Sometimes this is fine.
When it isn't, here is a quick tip for avoiding it - use the safe navigation operator, which does not send the method that follows it to nil.
irb(main):001:0> nil.to_i => 0 irb(main):002:0> nil&.to_i => nil irb(main):003:0> nil.to_f => 0.0 irb(main):004:0> nil&.to_f => nil
That's it. Happy navigating!