Ruby on Rails - итерация чисел по десятичным числам для поля рейтинга обзора - PullRequest
6 голосов
/ 30 апреля 2011

У меня есть модель Review, которая учитывает систему оценки продуктов от 1 до 10. В моем виде формы, вот как я сделал поле, чтобы выплевать выпадающий 1-10 ...

<%= f.select :rating, options_for_select((0..10).to_a, @review.rating) %>

Прекрасно работает, но команда сейчас хочет иметь .5 десятичных чисел для рейтинговой системы, так что что-то может быть оценено 7.5, 8.0, 8.5 и т. Д.

Однако, это поставило меня в тупик ... как я могу изменить приведенный выше код, перебирать набор чисел и увеличивать его на .5 каждый раз в Ruby? (Примечание. Да, я уже преобразовал свой столбец рейтинга из целого числа в число с плавающей точкой.)

Ответы [ 2 ]

16 голосов
/ 30 апреля 2011

Вы можете определить приращение следующим образом:

(0..10).step(0.5)
4 голосов
/ 16 апреля 2016

Ответ, помеченный как правильный, не является точным. Он страдает от ошибок точности с плавающей точкой - вы можете прочитать об этой распространенной проблеме информатики здесь: https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

Для точного увеличения этого диапазона вы должны передать BigDecimal в функцию step вместо плавающего по умолчанию Ruby:

require 'bigdecimal' 
require 'bigdecimal/util'

(0..10).step(0.5.to_d)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...