我猜浮标并不适合货币。 Mongoid支持Float和BigInteger。存储和使用货币值的最佳方法是什么?
答案 0 :(得分:6)
您可能希望查看Money gem。
它的工作方式是以美分表示金额并使用整数。 您可以按照这种方式将数据存储为整数,这样就不需要处理Float精度。
答案 1 :(得分:1)
西蒙娜说的话。
我刚刚在我的项目中插入了money gem,你也可以将它存储为Money类型。
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
答案 2 :(得分:0)
如果您实际上没有使用小数部分,也就是说,如果您只存储了预分频积分值,则浮点数对于货币可以正常工作。 Floats存储整数并完全执行整数运算。
当然,那时你也可以使用整数。