2010-11-04 12 views

Antwort

6

Vielleicht möchten Sie sich die Money gem ansehen.

Die Art, wie es funktioniert, ist, Geldbeträge in Cent darzustellen und ganze Zahlen zu verwenden. Sie können diesem Weg folgen und Ihre Daten als Integer speichern, so dass Sie sich nicht mit der Float-Genauigkeit beschäftigen müssen.

0

Floats würden für die Währung gut funktionieren, wenn Sie den Bruchteil nicht tatsächlich verwendet haben, dh wenn Sie nur vorskalierte Integralwerte gespeichert haben. Floats speichern Ganzzahlen und führen Integer-Ops genau aus.

Natürlich könnten Sie an diesem Punkt auch Ganzzahlen verwenden.

+0

Ich lese, dass "feste Genauigkeit" Anzahl Bibliotheken benötigt werden, wenn mit Währung arbeiten. – timstepp

+0

http://www.codeguru.com/forum/showthread.php?threadid=503157 ist ein Beispiel für eine Diskussion. – timstepp

1

Was Simone sagt.

Ich habe gerade das Geld-Juwel in mein Projekt eingefügt und Sie können es auch als Money-Typ speichern.

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