2010-11-04 5 views

Respuesta

6

que te pueden probablemente querrá tener un vistazo a la Money gem.

La forma en que funciona, es para representar las cantidades de dinero en centavos y enteros de uso. Puede seguir de esta manera y almacenar sus datos como un número entero para que no tenga que lidiar con la precisión de Float.

0

flotadores que funcionan bien para la moneda si no se utiliza realmente la parte de fracción, es decir, si sólo se almacenó preescalado valores integrales. Los flotantes almacenan enteros y realizan operaciones de enteros exactamente.

Por supuesto, en ese punto, que también podría usar números enteros.

+0

Estoy leyendo que se necesitan librerías numéricas de "precisión fija" cuando se trabaja con moneda. – timstepp

+0

http://www.codeguru.com/forum/showthread.php?threadid=503157 es una discusión de ejemplo. – timstepp

1

Qué dice Simone.

que acaba de insertar la gema dinero en mi proyecto y se puede almacenar como un tipo constructivo así dinero.

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 
Cuestiones relacionadas