Rails:在数据库中存储BigDecimal

时间:2017-09-09 20:55:35

标签: ruby-on-rails ruby database decimal bigdecimal

我正在处理一堆BigDecimals,我想将它存储到我的数据库中。理想情况下没有任何精度损失。我不知道实现这一目标的最好方法。

我想到了这一点:

t.decimal :value, precision: 1000, scale: 30

这似乎不是解决此问题的好方法。 1.它仍然会影响准确性。它变得越来越大了。

有没有办法将对象存储到数据库(#<BigDecimal:586a238,'0.563E0',9(36)>列中),然后将其重新初始化为BigDecimal?

2 个答案:

答案 0 :(得分:1)

您可能需要查看composed_of

但我更喜欢使用自定义getter和setter方法,因为我觉得它们更容易阅读和理解。

示例:假设您的属性名为foo,并且您希望在应用中使用BigDecimal,但将值存储为数据库中的字符串:

def foo
  BigDecimal.new(read_attribute(:foo))
end

def foo=(foo)
  write_attribute(:foo, foo.to_s)
end

答案 1 :(得分:1)

默认情况下,PostgreSQL Decimal的范围为“小数点前最多131072位;小数点后最多16383位”。这还不够吗?

https://www.postgresql.org/docs/9.1/static/datatype-numeric.html

只需使用:

t.decimal :value