我们在我们的应用程序中使用money-rails
gem。到目前为止,我们可以使用 4 位小数精度,但我们需要切换到 6。不幸的是,我无法将更高精度的数字存储到 Postgres 中 - 数字在保存之前被四舍五入。
class MyModel < ApplicationRecord
monetize :price_cents # :price_cents, :decimal, default: 0, precision: 30, scale: 10
end
金钱本身似乎可以以更高的精度正常工作
pry(main)> Money.new(181.123456789).to_f
=> 1.81123456789
在控制台中测试模型。保存前一切正常。
my_model = MyModel.find(1)
my_model.price = Money.new(181.123456789)
my_model.price.to_f # => 1.81123456789
my_model.save
my_model.price.to_f # => 1.8112
ActiveRecord 输出表明修剪后的数字实际上正在发送到数据库。(注意 181.12)。
UPDATE "my_models" SET "price_cents" = $1 ... [["price_cents", "181.12"] ...]
有什么方法可以让money-rails
gem 更精确地工作吗?似乎Money gem本身没有更高的精度问题。