我对rails很新,对我的数据库中的某些十进制值有一些疑问,显示在浏览器的默认脚手架索引/ show输出中略微偏离了一小部分。我有一个项目,其中属性的具体值是9.12,我可以确认它作为小数正确存储在我的sqlite3数据库中。但是在索引页面或项目的显示页面上,它给了我9.119999999999999
更令人困惑的是,如果我尝试编辑该项目,表格将在相关字段中显示9.12的精确值。
通过玩一下我可以看到其他值(例如9.11,9.13,9.14,9.123)会在html输出中给出类似的精度错误,而其他许多值(例如9.1,9.09,9.15,9.121)将会显示它们应该。
现在我意识到在使用浮点值时会出现这种行为,因为它们以二进制形式存储,但我的理解是小数不应该有任何精确的怪癖。如果那是真的那么我可以假设的是问题在于Rails。那么有人可以告诉我导致这种行为的原因吗?
显然我可以更新我的视图,以便正确显示:
<%= number_with_precision(item.value, precision: 2) %>
但是考虑到我在db中播种的每个项目都有过多的十进制值都显示得很好,我不想在问题看起来像是异常而不是每个十进制值时都这样做规则。
顺便说一下,我正在使用Rails 4.0.0beta1和Ruby 2.0.0(为了跟随最新版本的Agile Web Development with Rails一书)。我有兴趣知道Rails 3.2中是否会发生同样的事情
编辑:具有讽刺意味的是,如果我更新数据库以使用浮点类型,则所有内容都会正确显示。
答案 0 :(得分:0)
我认为在大多数情况下小数的处理方式与浮点数不同 - 我怀疑你会发现他们的行为有显着差异。
答案 1 :(得分:0)
我很久以前就问了这个问题,但是如果我没记错的话,这只是Rails测试版中的一个错误,并且在Rails 4的最终版本中表现得如预期的那样。