我有需要Float
屬性和相應的表的活動記錄模式:避免浮動截斷4
# app/models/test.rb
class Test < ActiveRecord::Base
end
# db/schema.rb
ActiveRecord::Schema.define(version:20150208185300)
enable_extension "plpgsql"
create_table "tests", force: true do |t|
t.datetime "created_at"
t.datetime "updated_at"
t.float "size"
end
end
當我堅持一個測試一切正常:
Test.create(size: 271893999999.99997)
#=> #<Test id: 1, created_at: "2015-02-07 19:43:22", updated_at: "2015-02-07 19:43:22", size: 271893999999.99997>
然而,當檢索測試的大小它回來截斷:
Test.last.size
#=> 271894000000.0
而且是當儘管誤導輸出堅持,當我創建它也被截斷:
Test.last
#=> #<Test id: 1, created_at: "2015-02-07 19:43:22", updated_at: "2015-02-07 19:43:22", size: 271894000000.0>
這個問題困擾我,因爲我可以做以下的紅寶石:
a = 123456789.123456789
#=> 123456789.123456789
a.class
#=> Float
a
#=> 123456789.123456789
什麼是Rails的使用Float
的限制/ Postgres的?如果我想要5位小數的精確度,我應該使用Decimal
嗎?
我用Rails 4.1.1和Postgres 9.3.5
我還是不明白,爲什麼我不能用浮法這個任務 - 它們能夠處理的Rails之外,許多小數。這是Postgres的限制嗎? – garythegoat 2015-02-08 23:42:26