浮动值在RoR 3.2中被截断

时间:2012-08-05 14:36:11

标签: ruby-on-rails ruby

在我的Rails 3.2应用程序中保存我的经度和纬度时,该值会在保存时被截断。

我已经在控制台中试过并且它保存了全部值:

 item.update_attributes(:latitude => '51.07763839854951')

 item.latitude:

 => 51.07763839854951

在浏览器中保存相同的值会产生以下输出:

 51.0865174

我该怎么做才能防止这种情况发生?

1 个答案:

答案 0 :(得分:1)

当值存储在数据库中时,该值可能会被截断。无论确切原因如何,如果此值是精确的并且需要无损地存储和检索,则浮点数可能是要使用的错误数据类型。当您对它们执行某些算术运算时,浮点数可能会失去精度,因此它们不适用于必须精确的值。

使用Rails迁移定义数据库模式时,可以将:decimal类型用于必须精确存储的十进制值。 (当ActiveRecord将这些值从数据库中提取出来时,它们将变为BigDecimal个对象而不是Float s您可以在BigDecimal上进行算术而不会丢失精度。)