【发布时间】:2013-02-12 16:18:49
【问题描述】:
我有一个使用浮点存储地理位置的模型。它使用 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
【问题讨论】:
-
什么数据库,纬度的属性类型是什么?
-
你能发布你的
schema.rbsn-p campings_table 代码吗? -
数据库,如上所述是 MySQL。我将在几秒钟内发布架构。
-
尝试双精度而不是浮点数
-
@RadBrad: double 不是 AR 类型,AFAIK。整数或小数是。
标签: ruby-on-rails floating-point rails-activerecord