15

अधिकांश गोल त्रुटियों से बचने के लिए धन का प्रतिनिधित्व करने के लिए मुझे किस वर्ग का उपयोग करना चाहिए?पैसे के प्रतिनिधित्व के लिए किस वर्ग का उपयोग करना है?

क्या मुझे Decimal, या एक साधारण अंतर्निहित number का उपयोग करना चाहिए?

क्या कोई मौजूदा Money क्लास है जो मुद्रा रूपांतरण के लिए समर्थन के साथ है जिसका उपयोग मैं कर सकता था?

कोई भी समस्या जो मुझे टालना चाहिए?

+0

मैंने हमेशा सोचा कि मुद्रा रूपांतरण सिर्फ गुणा है। – SilentGhost

+2

@SilentGost: हाँ और नहीं। आपको ध्यान रखना होगा कि आप * आपके मूल्यों का उपयोग कैसे करेंगे। आपने पिछले वर्ष यू $ S2000 + AR $ 6300 + € 1500 का भुगतान कब किया था और इस साल आपने यू $ S4000 + AR $ 1200 + € 500 का भुगतान किया था?ऐसी कई चीजें हैं जिन्हें आपको ध्यान में रखना है, इसलिए 'मनी' ऑब्जेक्ट को ऐतिहासिक मूल्य * और * वर्तमान मूल्य को सहेजने की आवश्यकता होगी। – voyager

+3

पिटाफ से बचने के लिए: फ़्लोटिंग पॉइंट नंबरों का उपयोग करना। कार्यालय अंतरिक्ष देखें। –

उत्तर

6

मुझे लगता है कि आप पाइथन के बारे में बात करते हैं। http://code.google.com/p/python-money/ "पायथन में पैसा और मुद्राओं के साथ काम करने के लिए प्रिमिटिव" - शीर्षक आत्म व्याख्यात्मक :)

+1

टैग्स के लिए यह है :) – voyager

+0

http://code.google.com/p/python-money/source/browse/trunk/money/Money.py पर देखकर मैं देख सकता हूं कि वे 'दशमलव' का उपयोग करते हैं आंतरिक प्रतिनिधित्व :) – voyager

4

वित्त के साथ काम करने के लिए आपको QuantLib में रुचि हो सकती है।

यह मुद्रा प्रकारों को संभालने के लिए कक्षाओं में बनाया गया है और 4 वर्षों के सक्रिय विकास का दावा करता है।

+0

यह प्रोजेक्ट दिलचस्प लग रहा है, लेकिन थोड़ा अधिक हो सकता है, मैं अधिकतर सादगी के लिए एक शुद्ध पायथन परियोजना का उपयोग करूंगा। – voyager

3

आप इस पुस्तकालय को देख सकते हैं: python-money। चूंकि मुझे इसके साथ कोई अनुभव नहीं है, इसलिए मैं इसकी उपयोगीता पर टिप्पणी नहीं कर सकता।

ए 'चाल' आप पूर्णांक के रूप में मुद्रा को संभालने के लिए रोजगार सकता है: 100 (जैसे $ 100,25 -> 10025) द्वारा 100/फूट डालो द्वारा

  • गुणा में एक प्रतिनिधित्व करने के लिए 'सेंट'
+5

कई लेखांकन प्रणाली केंद्र की तुलना में चीजों को अधिक सटीक रूप से ट्रैक करती हैं। –

+0

सच है, लेकिन सभी मुझे लगता है कि जरूरतों पर निर्भर करता है ... इस धागे में संदर्भित क्वांटलिब लाइब्रेरी 'गंभीर' वित्तीय काम के लिए एक अच्छा उम्मीदवार प्रतीत होता है। – ChristopheD

8

बस decimal का उपयोग करें।

+1

दशमलव सटीक हैडल के तरीके के कारण उपयुक्त नहीं है। मान लीजिए कि आप $ 0.01 की सटीकता के साथ $ 10 बिलियन से कम राशि का संचालन कर रहे हैं, इसलिए आप दशमलव लाइब्रेरी बताते हैं कि आपकी संख्या 12 अंकों से अधिक नहीं होगी। अब आपके पास दो समस्याएं हैं: आपका कोड हाइपर-मुद्रास्फीति को संभाल नहीं सकता है; और $ 0.01 को '0.010000000000' के रूप में प्रदर्शित किया जाएगा। – Pitarou

9

पैसे का प्रतिनिधित्व करने के लिए कभी भी फ़्लोटिंग पॉइंट नंबर का उपयोग न करें। फ़्लोटिंग नंबर दशमलव नोटेशन में संख्याओं का सटीक रूप से प्रतिनिधित्व नहीं करते हैं। आप कंपाउंड राउंडिंग त्रुटियों के दुःस्वप्न के साथ समाप्त हो जाएंगे, और मुद्राओं के बीच भरोसेमंद रूप से परिवर्तित करने में असमर्थ होंगे। Martin Fowler's short essay on the subject देखें।

यदि आप अपनी कक्षा लिखने का निर्णय लेते हैं, तो मैं इसे decimal डेटा प्रकार पर आधारित करने की अनुशंसा करता हूं।

मुझे नहीं लगता कि पाइथन-पैसा एक अच्छा विकल्प है, क्योंकि इसे काफी समय तक नहीं रखा गया था और इसके स्रोत कोड में कुछ अजीब और बेकार कोड है, और मुद्राओं का आदान-प्रदान बस टूट गया है।

py-moneyed आज़माएं। यह अजगर-धन पर सुधार है।

0

सरल, हल्के वजन, अभी तक विस्तृत विचार:

class Money(): 

    def __init__(self, value): 
     # internally use Decimal or cents as long 
     self._cents = long(0) 
     # Now parse 'value' as needed e.g. locale-specific user-entered string, cents, Money, etc. 
     # Decimal helps in conversion 

    def as_my_app_specific_protocol(self): 
     # some application-specific representation 

    def __str__(self): 
     # user-friendly form, locale specific if needed 

    # rich comparison and basic arithmetics 
    def __lt__(self, other): 
     return self._cents < Money(other)._cents 
    def __add__(self, other): 
     return Money(self._cents + Money(other)._cents) 

आप कर सकते हैं:

  • लागू केवल क्या आप अपने आवेदन में की जरूरत है।
  • जैसे ही आप बढ़ते हैं इसे बढ़ाएं।
  • आवश्यकतानुसार आंतरिक प्रतिनिधित्व और कार्यान्वयन बदलें।
संबंधित मुद्दे

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