我需要将GPS坐标存储在数据库中。我听说漂浮物不如小数精确。真的吗?如果是这样,有什么理由可以使用花车?
答案 0 :(得分:26)
由于地球赤道周长 40000 km 且经度跨度 360度,因此接近赤道 1度相当于<强>大约110公里。
因此:
但是,移动到波兰人越近,平行线的长度就越小。
例如,在 Paris 附近,纬度为48度,1度相当于cos(48) * 110 = 74 km
。
因此:
因此,类型DECIMAL(10,7)
的字段足以让您满意。
答案 1 :(得分:13)
如果你想要更准确的GPS坐标,那么是小数点是要走的路。您可以使用以下迁移创建它们:
create_table "models" do |t|
t.decimal "latitude", :precision => 15, :scale => 10, :default => 0.0
t.decimal "longitude", :precision => 15, :scale => 10, :default => 0.0
end
人们使用花车的原因是它们通常对于大多数用例来说足够精确,并且占用的空间较少。
答案 2 :(得分:1)
如果你想要小数的100%准确度,那么乘以10 ** n(其中n是你想要的精度),并存储为整数。
Float对象使用本机架构的双精度浮点表示来表示不精确的实数。
请参阅:
http://www.ruby-doc.org/core-1.9.3/Float.html
答案 3 :(得分:1)
正如你在保罗的回答中所看到的,这取决于你的用例 浮点数提供大约6位十进制数字的精度 例如,一个地址,±11厘米是完全可以接受的。如果你正在显示地址,那么你不太可能进行任何会导致舍入错误的算术运算。