2010-06-23 15 views
6

यदि आप अपने ActiveRecord कॉलम प्रकार को दशमलव मानते हैं, तो रेल उस डेटाबेस मान को रूबी BigDecimal ऑब्जेक्ट के रूप में वापस कर देंगे।रेल पर दशमलव रूचि दशमलव कॉलम

मेरा प्रश्न है, इन क्षेत्रों के साथ काम करते समय और उन पर अतिरिक्त गणित करने के दौरान, क्या मुझे हमेशा अपनी गणना में बिगडिमेमल मानों का उपयोग करना चाहिए या फ़्लोटिंग पॉइंट मानों का उपयोग करना ठीक है। मुझे नहीं पता था कि यह समान गणनाओं में बिगडिमेमल मानों और फ़्लोटिंग प्वाइंट मानों को मिश्रित करने का एक अच्छा अभ्यास है या नहीं।

मिश्रित उदाहरण: BigDecimal.new ('12 .43 ')/4,2

एक ही प्रकार के उदाहरण: BigDecimal.new ('12 .43')/BigDecimal.new ('4.2')

कारण मैं पूछ ऐसा इसलिए है क्योंकि मैं फ्लोट्स का उपयोग करने की एक छोटी बंदूक शर्मीली हूं क्योंकि मुझे दशमलव सटीकता की आवश्यकता है। 0.1 + 0.7 फ्लोट्स का उपयोग कर 0.8 के बराबर नहीं होगा।

उत्तर

2

जब से तुम

... एक छोटे से बंदूक तैरता का उपयोग करने का शर्मीली ...

उपयोग BigDecimal कर रहे हैं। ठीक काम करता है

+1

हाँ, मुझे लगता है कि मुझे BigDecimal का उपयोग करना चाहिए। मेरा सवाल यह है कि मैं गणना में सभी संख्याओं के लिए BigDecimal का उपयोग करना चाहिए। मैंने कुछ परीक्षण किया और यदि आप यह BigDecimal.new ('1.2') + 1.1 करते हैं तो वापसी मूल्य एक फ्लोट होगा जो BigDecimal नहीं होगा। तो ActiveRecords दशमलव कॉलम से निपटने के दौरान सभी BigDecimal संख्याओं का उपयोग करना सबसे अच्छा अभ्यास है क्योंकि यह आंतरिक रूप से BigDecimal का उपयोग कर रहा है, इसलिए आप अपनी गणना को अजीब फ्लोट राउंडिंग समस्या में चलाने का जोखिम नहीं उठाते हैं? – Dale

+0

पुन: BigDecimal.new ('1.2') + 1.1 रिटर्न फ्लोट। आप सही हे। चूंकि यह मामला है, केवल BigDecimal वस्तुओं के साथ काम करना सुनिश्चित करें। जब आप इसे आउटपुट करना चाहते हैं तो केवल तभी परिवर्तित करें। –

+0

इसके अलावा, 0 के बजाय BigDecimal.new ('0.0') का उपयोग करना याद रखें। –

संबंधित मुद्दे