1

我对rails完全陌生,并且对我的数据库中的一些十进制值在浏览器中的默认脚手架索引/显示输出中显示为略微偏离了非常小的数量有一些疑问。我有一个属性的特定值为 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) %>

但考虑到我在数据库中播种的每个项目都有大量显示都很好的十进制值,当问题似乎是例外而不是规则时,我不想对每个十进制值都执行此操作。

顺便说一下,我正在使用 Rails 4.0.0beta1 和 Ruby 2.0.0(为了跟上最新版本的 Agile Web Development with Rails 书)。我很想知道 Rails 3.2 中是否发生同样的事情

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

4

2 回答 2

0

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

于 2013-04-13T10:31:36.147 回答
0

我很久以前就问过这个问题,但如果我没记错的话,这只是 Rails 测试版中的一个错误,并且在 Rails 4 的最终版本中表现得如预期。

于 2015-03-20T02:27:39.673 回答