【发布时间】:2015-04-08 14:24:37
【问题描述】:
我有一个带有Float 属性和对应表的 Active Record 模型:
# 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>
这个问题让我很困惑,因为我可以在 Ruby 中执行以下操作:
a = 123456789.123456789
#=> 123456789.123456789
a.class
#=> Float
a
#=> 123456789.123456789
在 Rails/Postgres 中使用 Float 有什么限制?如果我想要 5 个小数点的精度,我应该使用 Decimal 吗?
我正在使用 Rails 4.1.1 和 Postgres 9.3.5
【问题讨论】:
标签: ruby-on-rails ruby postgresql rails-activerecord