Ruby on Rails - 对于评论评级字段,将十进制数字迭代

Sha*_*non 6 ruby numbers ruby-on-rails

我有一个Review模型,允许对产品进行"1-10"评级系统.在我的表单视图中,这是我如何在该字段中吐出1-10的下拉列表...

<%= f.select :rating, options_for_select((0..10).to_a, @review.rating) %>
Run Code Online (Sandbox Code Playgroud)

工作得很好,但团队现在想要评级系统的.5十进制数,所以可以评定7.5,8.0,8.5等.

然而,这让我感到困惑......我怎样才能改变上面的代码并迭代一组数字并在Ruby中每次递增0.5.(注意:是的,我已将我的评级列从整数转换为浮点数.)

mar*_*ark 16

您可以这样定义增量

(0..10).step(0.5)
Run Code Online (Sandbox Code Playgroud)

  • 真的很简单,但我面临一个问题,当我这样做(1..2).step(0.1)我的答案为[1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8 ,1.9000000000000001,2.0].为什么我得到1.9000000000000001 ??? (5认同)

zar*_*zan 7

标记为正确的答案不准确。它存在浮点精度错误 - 您可以在此处阅读有关此常见计算机科学问题的信息:https : //en.wikipedia.org/wiki/Floating_point#Accuracy_problems

要准确地增加此范围,您应该将 BigDecimal 传递给 step 函数,而不是默认的 Ruby 浮点数:

require 'bigdecimal' 
require 'bigdecimal/util'

(0..10).step(0.5.to_d)
Run Code Online (Sandbox Code Playgroud)