关于rails上的ruby:十进制值显示不正确

Decimal values showing up incorrectly

我对Rails完全陌生,对我的数据库中的一些十进制值有点疑问,在浏览器的默认scaffolding index/show输出中,这些值显示为稍微偏离了一小部分。我有一个项目,其中一个属性的特定值是9.12,我可以确认它以十进制的形式正确地存储在我的sqlite3数据库中。但是在索引页或项目的显示页上,它给出了9.1199999999999。

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

通过播放一点,我可以看到其他值(例如9.11、9.13、9.14、9.123)会在HTML输出中给我带来类似的精度错误,而其他许多值(例如9.1、9.09、9.15、9.121)会按其应显示的方式显示。

现在我意识到,在使用浮点值时,这种行为是可以预料的,因为它们是以二进制的方式存储的,但是我的理解是,十进制不应该有任何与精度有关的奇怪之处。如果这是真的,那么我只能假设问题出在Rails上。有人能告诉我是什么导致了这种行为吗?

显然,我可以更新我的视图,使其正确显示,如下所示:

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

但是考虑到我在数据库中输入的每一项都有大量的十进制值,这些值都显示得很好,所以当问题似乎是例外而不是规则时,我不想为每个十进制值都这样做。

顺便说一句,我正在使用Rails4.0.0Beta1和Ruby2.0.0(以便与最新版本的Agile Web Development with RailsBook一起使用)。我想知道Rails3.2是否也发生了同样的事情。

编辑:具有讽刺意味的是,如果我更新数据库以使用float类型,所有内容都会正确显示。


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


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