我正在处理一堆BigDecimals,我想将它存储到我的数据库中。理想情况下没有任何精度损失。我不知道实现这一目标的最好方法。
我想到了这一点:
t.decimal :value, precision: 1000, scale: 30
这似乎不是解决此问题的好方法。 1.它仍然会影响准确性。它变得越来越大了。
有没有办法将对象存储到数据库(#<BigDecimal:586a238,'0.563E0',9(36)>
列中),然后将其重新初始化为BigDecimal?
答案 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