Округление с плавающей запятой до ближайшего квартала в Ruby

#ruby-on-rails #ruby #floating-point

#ruby-on-rails #ruby #с плавающей запятой

Вопрос:

Я работаю с внешним API в приложении Ruby on Rails. Мне нужно отправить в эту компанию значения с плавающей запятой, но они принимают только такие значения, как 1.0 , 1.25 , 1.5 , 1.75 , и т.д. 2.0

У меня может быть значение типа 1.34 или 1.80 . В идеале мне нужно округлить их до ближайшего 0.25 . Каков наилучший способ добиться этого? если я это сделаю 1.34.round(0) , это даст мне 1.0 значение ниже, чем мне нужно.

Спасибо!

Ответ №1:

 (1.27 * 4).round / 4.0
#=> 1.25
  

Если вы собираетесь использовать его часто, было бы разумно исправить класс, чтобы упростить использование Float :

 class Float
  def round_to_quarter
    (self * 4).round / 4.0
  end
end
1.27.round_to_quarter
#=> 1.25
1.52.round_to_quarter
#=> 1.5
1.80.round_to_quarter
#=> 1.75
1.88.round_to_quarter
#=> 2.0
  

Комментарии:

1. Честно говоря, это вопрос мнения, Динеш

Ответ №2:

Хотя решение Андрея будет работать, если вам не нравится, когда monkey исправляет основной класс ruby, также будет работать следующее

 #x being the value
(x * 4).round / 4.0
  

Комментарии:

1. Это буквально то же (self * 4).round / 4.0 самое, что и в моем примере, когда это self экземпляр Float 🙂

2. Да, я абсолютно согласен с вами. Просто альтернатива. 🙂