Why is my floating point rounded in Rails?
我有一个使用浮点存储地理位置的模型。它使用ActiveRecord和Rails 3.2.x将数据存储在MySQL中。
1 2 3 4 5 6 7 8 | c = Camping.new() c.latitude=51.77802459999999 c.save c.latitude => 51.77802459999999 c.reload c.latitude => 51.778 |
在数据库中查找时,我确认它存储为51.778。其他数字的存储精度更高,我认为
是什么决定了数字可以或应该在三位数后被切掉?有什么可以控制的吗?float是存储这个的正确类型吗?
我想要一个6的精度,永远不会多,但可以少,或加垫。因此,当提供
1 2 3 4 5 | create_table"campings", :force => true do |t| #... t.float "latitude" t.float "longitude" end |
显然,MySQL是个问题,因为float被描述为一个近似值。
您可以改用十进制,并指定精度和比例:
1 2 3 4 5 | create_table"campings", :force => true do |t| #... t.decimal "latitude", :precision => 15, :scale => 10 t.decimal "longitude", :precision => 15, :scale => 10 end |