Ruby on rails 为什么我的浮点在Rails中是四舍五入的?
我有一个使用浮点存储地理位置的模型。它使用ActiveRecord、Rails 3.2.x将数据存储在MySQL中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决定忽略其余数字的原因
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类型,好的。整数或十进制是。在存储和查找时间、索引或存储空间方面有什么缺点吗?对于我的小型应用程序来说,这一点都不重要;但为了清楚起见,根据浮点数是。但是,它们不可靠,因此我认为性能上的微小改进不值得。比较和基准: