Вот одна идея:
class String
def nonnegative_float?
Float(self) >= 0
rescue ArgumentError
return false
end
end
Однако, поскольку у вас уже есть достаточно хорошее представление о том, как выглядит неотрицательное число с плавающей точкой, вы также можете сравнить его с Regexp
:
class String
def nonnegative_float?
!!match(/\A\+?\d+(?:\.\d+)?\Z/)
end
end