我有需要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