2010-11-04 12 views
12

का उपयोग कर मुद्रा के लिए डेटा प्रकार मुझे लगता है कि फ्लोट मुद्रा के लिए आदर्श नहीं हैं। Mongoid फ्लोट और BigInteger का समर्थन करता है। मुद्रा मूल्यों के साथ भंडारण और काम करने के लिए सबसे अच्छा तरीका क्या है?Mongoid

उत्तर

6

शायद आप Money gem पर एक नज़र डालना चाहते हैं।

जिस तरह से यह काम करता है, सेंट में धन राशि का प्रतिनिधित्व करना और पूर्णांक का उपयोग करना है। आप इस तरह का अनुसरण कर सकते हैं और अपने डेटा को पूर्णांक के रूप में स्टोर कर सकते हैं ताकि आपको फ़्लोट परिशुद्धता से निपटने की आवश्यकता न हो।

0

फ़्लोट्स मुद्रा के लिए ठीक काम करेंगे यदि आपने वास्तव में अंश भाग का उपयोग नहीं किया है, यानी, यदि आपने केवल संरक्षित अभिन्न मूल्यों को संग्रहीत किया है। स्टोर पूर्णांक फ़्लोट करता है और बिल्कुल पूर्णांक ops निष्पादित करता है।

बेशक, उस बिंदु पर, आप पूर्णांक का भी उपयोग कर सकते हैं।

+0

मैं पढ़ रहा हूं कि मुद्रा के साथ काम करते समय "निश्चित परिशुद्धता" संख्या पुस्तकालयों की आवश्यकता है। – timstepp

+0

http://www.codeguru.com/forum/showthread.php?threadid=503157 एक उदाहरण चर्चा है। – timstepp

1

क्या सिमोन कहते हैं।

मैंने अभी अपनी परियोजना में मनी मणि डाला है और आप इसे मनी टाइप के रूप में भी स्टोर कर सकते हैं।

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