1

我为现有表创建了一个 rails 模型类。一些表字段是在 Postgres DB 中定义为 numeric(19,2) 的十进制字段。当我打开 rails 控制台并像这样获取其中一个对象时:

 ExistingTableModel.first.total
 #<BigDecimal:4bfd250,'0.692E3',9(18)>

所以,我得到一个 BigDecimal 9(18) 。这是一个问题,因为当我进行求和之类的事情时,由于四舍五入,结果并不好。

如何强制 rails 将这些字段映射到具有 2 位小数的 BigDecimal?

谢谢!

4

2 回答 2

2

您可以覆盖属性访问器。假设您有一个带有属性 foo numeric(19,2) 的旧 Postgres 表

model ExistingTableModel < ActiveRecord::Base
  def foo
    read_attribute(:foo).round(2)
  end
end

这将使对 foo 属性的每次访问都舍入到小数点后 2 位的精度。

于 2012-09-17T22:32:00.823 回答
1

使用模型相关表格列中的精度和比例选项。

从文档:

精度是有效位数,而小数位数是小数点后可以存储的位数。例如,数字 123.45 的精度为 5,小数位数为 2。精度为 5,小数位数为 2 的小数的范围可以从 -999.99 到 999.99。

PostgreSQL::precision [1..infinity],:scale [0..infinity]。没有默认值。

完整的 API 参考

于 2012-09-17T22:33:19.073 回答