2012-03-31 14 views
7

मैंने शोध किया है और पाया है कि मुद्रा से निपटने के दौरान, गणना करने के बारे में जाने का सबसे अच्छा तरीका BigDecimal वर्ग है।बिगडेसिमल और मनी

इस बात को ध्यान में रखते हुए, मैं एक ऐसे कोड पर काम कर रहा हूं जो विभिन्न प्रकार की विदेशी मुद्रा को अमेरिकी मुद्रा में परिवर्तित करता है और इसके विपरीत (विशेष रूप से, एक नकदी रजिस्टर जो विदेशी मुद्रा लेता है और इसे अमेरिकी धन में परिवर्तित करता है, परिवर्तन की गणना करता है और इस राशि को ग्राहक को विदेशी मुद्रा में वापस कर देता है)।

अभी तक, कई विधियां double का उपयोग करती हैं और उनमें से दो अमेरिकी मुद्रा की गणना करने के लिए उपयोग किए जाने वाले पैरामीटर के रूप में int में ले जाती हैं।

प्रश्न:

के बाद से मैं अपने गणना में BigDecimal वर्ग का उपयोग करना चाहते, मैं अपने सभी तरीकों कि एक BigDecimal के लिए युगल को शामिल गणना करने बदलना चाहिए?

+2

हां, यह एक अच्छा विचार की तरह लगता है। 1+ इसके लिए फ़्लोटिंग-पॉइंट नंबरों के उपयोग से बचने के लिए चाहते हैं। –

+0

पैसे के साथ गणना करने के लिए एक और व्यावहारिक दृष्टिकोण राशन है। उनके पास 'असीमित' सटीकता है, स्थिर और बिगडिसीमल से भी तेज़ हैं। – Neet

उत्तर

4

हां, आपको इनट्स, लांग या BigDecimals लेने के लिए सभी फ्लोट या युगल बदलना चाहिए।

फ़्लोट्स और युगल वित्तीय गणना के लिए सटीक नहीं हैं। मात्रा और मुद्राओं से निपटने के लिए Money पैटर्न का उपयोग करना बहुत अच्छा विचार है (यह एक विशेष प्रकार का Quantity है)। संभवतः कई मुद्राओं में पैसा की सूची बनाए रखने के लिए, आप MoneyBag का संग्रह कर रहे हैं, Money का संग्रह जो तब लक्ष्य मूल्य और CurrencyExchangeService (सभी मुद्रा रूपांतरण दरों को BigDecimals के रूप में संग्रहीत किया जाना चाहिए) का संग्रह कर सकता है।

वांछित दशमलव स्थानों और राउंडिंग एल्गोरिदम की संख्या के अनुसार प्रत्येक ऑपरेशन के बाद गोल करना चाहिए। दशमलव स्थानों की संख्या आमतौर पर Currency की संपत्ति है (देखें, उदाहरण के लिए, ISO 4217 पर); जब तक कि एक अलग संख्या वांछित न हो (जैसे कि मूल्य निर्धारण गैसोलीन, उदाहरण के लिए)।

आपको निश्चित रूप से फाउलर के उदाहरणों को देखना चाहिए; लेकिन मैंने exercise के लिए एक बहुत ही सरल यूनी-मुद्रा Money कक्षा भी बनाई है। यह केवल 2 दशमलव स्थानों पर डॉलर और राउंड का उपयोग करता है; लेकिन यह अभी भी भविष्य के विस्तार के लिए एक अच्छा आधार है।

+0

कभी-कभी वित्तीय गणनाएं और अधिक परिष्कृत दृष्टिकोण लेती हैं। जैसे एक सामान्य मामला एन% और (100-एन)% भागों में एक राशि को अलग कर रहा है ताकि गोलियों के बावजूद भागों का योग पैनी-परिपूर्ण हो। – 9000

+0

@ 9000: हां, फाउलर ने इसके लिए आवंटन एल्गोरिदम का वर्णन किया, PoEAA को देखें; मैंने इसे सफलतापूर्वक पहले भी उपयोग किया है ... –

+0

@ 9000: मुझे एल्गोरिदम मिला [यहां] (http://books.google.ca/books?id=Jl5rkQnbfAIC&lpg=PA489&ots=gut4bQs6FR&dq=fowler%20money%20conundrum&pg = पीए 4 9 4 # वी = वनपृष्ठ और क्यू एंड एफ = झूठा) –

1

हां, बिगडेसिमल निश्चित रूप से सही तरीका है (फ्लोटिंग पॉइंट लगभग कभी नहीं)। जेडीबीसी में भी।

लेकिन कहा जाता है कि, गोल करने के साथ कोई समस्या है। कुछ मामलों में यूरोपीय सॉफ्टवेयर में 6 दशमलव कानूनी रूप से आवश्यक हैं। आम तौर पर आप हर कदम में 2 स्थानों पर गोल करना चाहते हैं। यदि आपके पास 2 दशमलव और मूल्य के साथ मात्रा है, तो आपको 4 दशमलव मिलेंगे, और उन्हें गोल करना होगा। तो बदसूरत BigDecimal इंटरफ़ेस भी उलझन बनाने के लिए, आपको शायद कुछ मदद कार्यों की आवश्यकता है (multiplyRounded?)।

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