Ruby on rails 为什么我的浮点在Rails中是四舍五入的?

Ruby on rails 为什么我的浮点在Rails中是四舍五入的?,ruby-on-rails,floating-point,rails-activerecord,Ruby On Rails,Floating Point,Rails Activerecord,我有一个使用浮点存储地理位置的模型。它使用ActiveRecord、Rails 3.2.x将数据存储在MySQL中 c = Camping.new() c.latitude=51.77802459999999 c.save c.latitude => 51.77802459999999 c.reload c.latitude => 51.778 在查看数据库时,我确认它存储为51.778。其他数字的存储精度更高,我认为0是ActiveRecord或MySQL决定忽略其余数字的原因

我有一个使用浮点存储地理位置的模型。它使用ActiveRecord、Rails 3.2.x将数据存储在MySQL中

c = Camping.new()
c.latitude=51.77802459999999
c.save
c.latitude
=> 51.77802459999999
c.reload
c.latitude
=> 51.778
在查看数据库时,我确认它存储为51.778。其他数字的存储精度更高,我认为
0
是ActiveRecord或MySQL决定忽略其余数字的原因

是什么决定了数字可以或应该在三位数后被截断?有什么可以控制的吗?float是存储此数据的正确类型吗

我希望精度为6,不能再高,但可以再低,或者加衬垫。因此,当提供
51.7780
时,它可能存储为
51.7780
51.778000
。当提供了
51.7780245999999
时,可将其存储为
51.778025
或全精度数字;我真的不在乎

来自schema.rb的相关部分:

  create_table "campings", :force => true do |t|
    #...
    t.float    "latitude"
    t.float    "longitude"
  end

很明显,MySQL是个问题,因为float被描述为一个

可以改为使用十进制,并指定精度和比例:

create_table "campings", :force => true do |t|
  #...
  t.decimal    "latitude",  :precision => 15, :scale => 10
  t.decimal    "longitude", :precision => 15, :scale => 10
end

什么数据库,纬度的属性类型是什么?你能发布你的
schema.rb
snippet-campings\u表code.database吗,如前所述是MySQL。我将在一秒钟内发布该架构。请尝试使用double而不是doublefloat@RadBrad:double不是AR类型,好的。整数或十进制是。在存储和查找时间、索引或存储空间方面有什么缺点吗?对于我的小型应用程序来说,这一点都不重要;但为了清楚起见,根据浮点数是。但是,它们不可靠,因此我认为性能上的微小改进不值得。比较和基准: