我有一个使用浮点来存储地理位置的模型。它使用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.77802459999999
时,可以将其存储为51.778025
或完整精度的数字;我真的不在乎。
来自schema.rb
的相关部分:
create_table "campings", :force => true do |t|
#...
t.float "latitude"
t.float "longitude"
end
答案 0 :(得分:0)
显然,MySQL是问题,因为float被描述为approximated value。
您可以改为使用小数,并指定精度和比例:
create_table "campings", :force => true do |t|
#...
t.decimal "latitude", :precision => 15, :scale => 10
t.decimal "longitude", :precision => 15, :scale => 10
end