1

我完全不熟悉rails,并且对于我的数据库中的一些十进制值有点问题,显示为在默认脚手架index/show输出中略微偏离了一小部分浏览器。我有一个项目,其中一个属性的特定值是9.12,我可以确认它是正确存储在我的sqlite3数据库中的一个小数。然而,在索引页面或项目的显示页面上,它给了我9.119999999999999小数值显示不正确

更令人困惑的是,如果我尝试编辑项目,表单将在相关字段中显示9.12的精确值。

通过玩弄一下我可以看到其他值(例如9.11,9.13,9.14,9.323)会在html输出中给我类似的精度错误,而许多其他值(例如9.1,9.09,9.15,9.121)将显示他们应该。

现在我意识到这种行为是因为使用浮点值的方式,因为它们以二进制存储的方式,但我的理解是,小数不应该有任何这样的怪癖与精度。如果这是真的,那么我只能假设问题在于Rails。那么任何人都可以启发我导致这种行为的原因?

很显然,我可以更新我的看法,使之正常显示,像这样:

<%= number_with_precision(item.value, precision: 2) %> 

,但考虑到我在数据库中播种每件商品都有十进制值过多,所有的显示就好了,我当问题似乎是例外而不是规则时,不希望对每个十进制值进行此操作。

我使用Rails 4.0.0beta1与Ruby 2.0.0的方式(为了跟随最新版本的敏捷Web开发与Rails书)。如果同样的事情发生在Rails的3.2我很想知道

编辑:具有讽刺意味的一切都显示正确,如果我更新使用float类型,而不是数据库。

+0

“十进制不应该有什么这样的怪癖与精度“为什么? – sawa

+0

这是我从[这里]得到的印象(http://stackoverflow.com/questions/8514167/float-vs-decimal-in-activerecord)以及有关该主题的其他链接。 – Inkling

回答

0

我很久以前问过这个问题,但如果我没有记错,这只是在Rails中的beta版中的错误,并表现为预期的最终版本的Rails 4

0

我不认为在大多数情况下小数的处理方式与浮点数不同 - 我怀疑你会发现它们的行为有显着差异。