Я думаю, что поплавки не идеальны для валюты. Монгоид поддерживает Float и BigInteger. Какой лучший подход для хранения и работы с валютными ценностями?
Тип данных для валюты с использованием Mongoid
Ответ 1
Возможно, вам захочется взглянуть на денежный камень.
Как это работает, это представлять денежные суммы в центах и использовать целые числа. Вы можете следовать этому пути и хранить свои данные как целые, чтобы вам не нужно иметь дело с точностью Float.
Ответ 2
Что говорит Симон.
Я только что вложил драгоценный камень в свой проект, и вы также можете сохранить его как тип денег.
class Product
include Mongoid::Document
field :price, type: Money
end
Money.class_eval do
# Converts an object of this instance into a database friendly value.
def mongoize
[cents, currency.to_s]
end
class << self
# Get the object as it was stored in the database, and instantiate
# this custom class from it.
def demongoize(object)
cur = object[1] || Money.default_currency
Money.new(object[0], cur)
end
# Takes any possible object and converts it to how it would be
# stored in the database.
def mongoize(object)
case object
when Money
object.mongoize
else object
end
end
# Converts the object that was supplied to a criteria and converts it
# into a database friendly form.
def evolve(object)
case object
when Money then object.mongoize
else object
end
end
end
end
Ответ 3
Поплавки будут работать нормально для валюты, если вы фактически не использовали часть дроби, то есть, если вы только сохранили предварительно запрограммированные интегральные значения. Поплавки хранят целые числа и выполняют целые операции точно.
Конечно, в этот момент вы могли бы также использовать целые числа.