Я храню некоторые широты и долготы в базе данных MySQL, используя Rails 3.0.3. Вот часть миграции, которую я использовал для создания таблицы (обратите внимание на десятичное значение с заданной точностью):
create_table :dummies do |t|
t.decimal :something, :precision => 13, :scale => 10
end
Следующий пример RSpec должен проиллюстрировать, где происходит ошибка.
Я использую BigDecimal для некоторых вычислений, и результирующее my_value
- это число с большой точностью (больше, чем указано в миграции). Я сохраняю объект в базе данных и извлекаю его снова.
Сравнивать исходное значение со значением базы данных не удается, так как их точность не совпадает, поэтому это больше не то же самое число:
it 'should be equals before and after save' do
my_value = BigDecimal('4.123456789') * 5000 # more precise than defined in the migration
dummy = Dummy.new(:something => my_value)
location.save!
Dummy.first.something.should == dummy.something
end
Я понимаю, почему это происходит (точность десятичного числа в MySQL! = BigDecimal), но кто-нибудь может сказать мне, как я могу ограничить точность my_value
BigDecimal перед записью его в базу данных, чтобы он учитывает ограничения базы данных?
Спасибо!