Мы используем money-rails
драгоценный камень в нашем приложении. До сих пор мы были в порядке с точностью до 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 нет проблем с более высокой точностью.