क्या एक एकल डेटा प्रतिनिधित्व है जो सभी मुद्राओं (यहां तक ​​कि डॉलर, यूरो और पाउंड से भिन्न) के लिए काम करता है?


12

मैं कुछ मुद्रा में राशियों का प्रतिनिधित्व करने के लिए पुस्तकालयों के बारे में कई प्रश्न पा सकता हूं। और क्यों आप IEEE 754 फ़्लोटिंग पॉइंट नंबर के रूप में मुद्रा को स्टोर नहीं करना चाहिए, इसके बारे में उम्र के पुराने मुद्दे के बारे में। लेकिन मुझे और कुछ भी नहीं मिल रहा है। निश्चित रूप से वास्तविक दुनिया के उपयोग में मुद्रा के बारे में जानने के लिए बहुत कुछ है। मुझे विशेष रूप से इस बात में दिलचस्पी है कि आपको भौतिक उपयोग में इसका प्रतिनिधित्व करने के लिए क्या जानना चाहिए (जैसे, डॉलर के साथ, आपके पास कभी भी 0.01 डॉलर से कम की सटीकता नहीं होती है, जो पूर्णांक संख्या के रूप में प्रतिनिधित्व की अनुमति देता है)।

लेकिन यह अनुमान लगाना कठिन है कि आपका कार्यक्रम कितना बहुमुखी है जब आप जानते हैं कि केवल वही मुद्राएं हैं जो लोकप्रिय पश्चिमी हैं (जैसे डॉलर, यूरो और पाउंड)। विशुद्ध रूप से प्रोग्रामेटिक परिप्रेक्ष्य में प्रासंगिक ज्ञान और क्या है? मुझे रूपांतरण के विषय की चिंता नहीं है।

विशेष रूप से, हमें कुछ मुद्रा में मूल्यों को संग्रहीत करने और उन्हें प्रिंट करने में सक्षम होने के लिए क्या जानने की आवश्यकता है?


2
सभी प्रोग्रामर उन उद्योगों में काम नहीं करते हैं जो मुद्रा राशियों में हेरफेर करते हैं।
whatsisname

4
ओह बेशक। लेकिन यह लगभग कुछ भी कहा जा सकता है। मुझे लगता है कि हम यह मान सकते हैं कि जो लोग इस प्रश्न को उपयोगी पाएंगे, वे मुद्रा के साथ काम करेंगे।
कैट

5
मैंने NYC में बैंकों और अन्य वित्तीय सेवा फर्मों के लिए बहुत सारे विकास कार्य किए हैं। और मैं बहुत अधिक गारंटी दे सकता हूं कि आपके प्रश्न का कोई "बंद फ़ॉर्म" उत्तर नहीं है। आप यह भी पूछ सकते हैं, "मुझे कितना गणित जानना है?" उदाहरण के लिए, 1990 के शेयर की कीमतों में वापस इगथ और 256 वें से दशमलव तक चला गया, जिसमें बहुत से रिप्रोग्रामिंग की आवश्यकता होती है। कौन अनुमान लगा सकता है कि क्या होगा? आपको केवल उन व्यवसाय को समझना होगा जो आपके एप्लिकेशन समर्थन कर रहे हैं, और उन व्यावसायिक आवश्यकताओं का समर्थन करने के लिए डेटा (इस मामले में मुद्रा में) का सबसे अच्छा प्रतिनिधित्व कैसे करें।
जॉन फोर्कोश

4
मेरी 0.02: मूल्य एक बात है। मुद्रा दूसरी है।
मचाडो

3
मैंने सोचा, ओह, सभी मुद्राओं के लिए कुछ सामान्य हर होना चाहिए। लेकिन शायद नहीं। पेनी स्टर्लिंग वर्तमान में 1⁄100 पाउंड का है, लेकिन 140240 पाउंड का था। तो न केवल आपके पास 1/240 का एक विभाजन है, बल्कि आपके पास स्विच-ओवर की तारीख है, और संभवतः पुराने पेंस के लिए विनिमय दर अभी तक नहीं बदली गई है। en.wikipedia.org/wiki/Penny_sterling मुझे कौड़ी के गोले पर भी न दें! en.wikipedia.org/wiki/Shell_money या तथ्य यह है कि पैसे को वास्तविक बनने के लिए विश्वास की आवश्यकता है: en.wikipedia.org/wiki/Money भले ही यह StackExchange अच्छी तरह से फिट नहीं है!
ग्लेनपेटर्सन

जवाबों:


24

उदाहरण के लिए, डॉलर के साथ, आपके पास $ 0.01 से कम की सटीकता नहीं है

क्या सचमे? यहाँ छवि विवरण दर्ज करें

आप IEEE 754 फ़्लोटिंग पॉइंट संख्या के रूप में मुद्रा क्यों नहीं संग्रहित करना चाहते हैं, इस बारे में उम्र का पुराना मुद्दा।

यहाँ छवि विवरण दर्ज करें

कृपया IEEE 754 फ़्लोटिंग पॉइंट नंबरों में इंच स्टोर करने के लिए स्वतंत्र महसूस करें । वे ठीक-ठीक स्टोर करते हैं कि आप कैसे उम्मीद करेंगे।

कृपया आईईईई 754 फ़्लोटिंग पॉइंट नंबरों में किसी भी राशि को स्टोर करने के लिए स्वतंत्र महसूस करें, जिसे आप उन शासकों का उपयोग करके स्टोर कर सकते हैं जो एक शासक को एक इंच के अंशों में विभाजित करते हैं।

क्यों? क्योंकि जब आप IEEE 754 का उपयोग करते हैं तो आप इसे स्टोर कर रहे हैं।

इंच के बारे में बात यह है कि वे हिस्सों में विभाजित हैं। अधिकांश प्रकार की मुद्रा के बारे में बात यह है कि वे दसवें भाग में विभाजित हैं (कुछ प्रकार नहीं हैं लेकिन चलो केंद्रित रहें)।

यह अंतर सभी को भ्रमित करने वाला नहीं होगा, इसके अलावा, अधिकांश प्रोग्रामिंग भाषाओं के लिए, IEEE 754 फ़्लोटिंग पॉइंट नंबरों से इनपुट और आउटपुट दशमलव में व्यक्त किया गया है! जो बहुत अजीब है क्योंकि वे दशमलव में संग्रहीत नहीं हैं।

इस वजह से आपको कभी यह देखने को नहीं मिलता है कि जब आप कंप्यूटर को स्टोर करने के लिए कहते हैं तो कैसे अजीब चीजें करते हैं 0.1। जब आप इसके खिलाफ गणित करते हैं तो आपको केवल अजीबता दिखाई देती है और इसमें अजीब त्रुटियां होती हैं।

से जोश बलोच के प्रभावी जावा :

System.out.println(1.03 - .42);

का उत्पादन 0.6100000000000001

इसके बारे में जो सबसे ज्यादा बता रहा है, 1वह दायीं ओर बैठा रास्ता नहीं है । यह अजीब संख्या है जिसे इसे प्राप्त करने के लिए उपयोग किया जाना था। सबसे लोकप्रिय उदाहरण का उपयोग करने के बजाय 0.1, हमें एक उदाहरण का उपयोग करना होगा जो समस्या को दिखाता है और उस दौर को टालता है जो इसे छिपाएगा।

उदाहरण के लिए, यह काम क्यों करता है?

System.out.println(.01 - .02);

का उत्पादन -0.01

क्योंकि हम भाग्यशाली हो गए।

मुझे उन समस्याओं से नफरत है जिनका निदान करना मुश्किल है क्योंकि मुझे कभी-कभी "भाग्यशाली" मिलता है।

IEEE 754 बस 0.1 ठीक से स्टोर नहीं कर सकता। लेकिन अगर आप इसे 0.1 स्टोर करने के लिए कहेंगे और फिर इसे प्रिंट करने के लिए कहेंगे तो यह 0.1 दिखाएगा और आपको लगेगा कि सब कुछ ठीक है। यह ठीक नहीं है, लेकिन आप इसे देख नहीं सकते क्योंकि यह 0.1 से वापस पाने के लिए गोल है।

कुछ लोग इन विसंगतियों को गोइंग एरर कहकर दूसरों से अलग होने को भ्रमित करते हैं। नहीं, ये गलतियाँ नहीं हैं। राउंडिंग वह कर रहा है जो इसे करना चाहिए और जो दशमलव में दशमलव नहीं है उसे स्क्रीन पर प्रिंट कर सकता है।

लेकिन यह मिसमैच को छुपाता है कि कैसे नंबर प्रदर्शित किया जाता है और इसे कैसे संग्रहीत किया जाता है। राउंडिंग होने पर त्रुटि नहीं हुई। यह तब हुआ जब आपने एक नंबर एक सिस्टम में डालने का फैसला किया जो इसे ठीक से स्टोर नहीं कर सकता और यह मान लिया कि जब यह ठीक से स्टोर नहीं किया जा रहा था।

कोई भी उम्मीद नहीं करता है कि in एक कैलकुलेटर में ठीक से स्टोर किया जा सकता है और वे इसके साथ काम करना ठीक समझते हैं। तो समस्या परिशुद्धता के बारे में भी नहीं है। यह अपेक्षित सटीकता के बारे में है। कंप्यूटर एक दसवें को 0.1उसी तरह प्रदर्शित करते हैं, जैसा कि हमारे कैलकुलेटर करते हैं, इसलिए हम उनसे उम्मीद करते हैं कि एक दसवां हिस्सा पूरी तरह से हमारे गणनाकर्ताओं की तरह ही होगा। वे नहीं करते। जो आश्चर्य की बात है, क्योंकि कंप्यूटर अधिक महंगे हैं।

मुझे तुम बेमेल दिखाओ:

यहाँ छवि विवरण दर्ज करें

ध्यान दें कि 1/2 और 0.5 लाइन पूरी तरह से। लेकिन 0.1 सिर्फ लाइन अप नहीं करता है। यदि आप 2 से विभाजित करते हैं तो निश्चित रूप से आप पास हो सकते हैं, लेकिन आप इसे कभी नहीं मारेंगे। और हर बार जब हम विभाजित होते हैं तो हमें अधिक से अधिक बिट्स की आवश्यकता होती है। इसलिए 0.1 को किसी भी सिस्टम के साथ प्रतिनिधित्व करना जो 2 से विभाजित होता है, को अनंत संख्या में बिट्स की आवश्यकता होती है। मेरा हार्ड ड्राइव अभी इतना बड़ा नहीं है।

इसलिए IEEE 754 बिट्स से बाहर निकलते समय कोशिश करना बंद कर देता है। जो अच्छा है क्योंकि मुझे अपनी हार्ड ड्राइव पर कमरे की जरूरत है ... परिवार की तस्वीरें। सच में नहीं। परिवार की फ़ोटोज़। : पी

वैसे भी, आप जो टाइप करते हैं और जो आप देखते हैं वह दशमलव (दाईं ओर) है लेकिन जो आप स्टोर करते हैं वह बिकिमल्स (बाईं ओर) है। कभी-कभी वे पूरी तरह से समान होते हैं। कभी-कभी वे नहीं होते। कभी-कभी ऐसा लगता है जैसे वे वही हैं जब वे बस नहीं हैं। वह गोलाई है।

विशेष रूप से, हमें कुछ मुद्रा में मूल्यों को संग्रहीत करने और इसे प्रिंट करने में सक्षम होने के लिए क्या जानने की आवश्यकता है?

कृपया, यदि आप मेरे दशमलव आधारित पैसे को संभाल रहे हैं, तो फ़्लोट या डबल्स का उपयोग न करें।

अगर आपको यकीन है कि दसियों पैसे की चीजें शामिल नहीं होंगी तो बस पेनीज़ को स्टोर करें। यदि आप यह पता नहीं लगा रहे हैं कि इस मुद्रा की सबसे छोटी इकाई क्या होने वाली है और इसका उपयोग करें। यदि आप नहीं कर सकते हैं, तो BigDecimal जैसी किसी चीज़ का उपयोग करें ।

मेरा नेट वर्थ शायद ६४ बिट पूर्णांक में हमेशा ठीक रहेगा, लेकिन बिगइंटर जैसी चीजें इससे भी बड़ी परियोजनाओं के लिए काम करती हैं। वे देशी प्रकारों की तुलना में धीमे हैं।

यह पता लगाना कि इसे कैसे स्टोर करना है, यह केवल आधी समस्या है। याद रखें आपको इसे प्रदर्शित करने में सक्षम होना चाहिए। एक अच्छा डिज़ाइन इन दो चीजों को अलग करेगा। यहां तैरने का उपयोग करने के साथ वास्तविक समस्या यह है कि दो चीजें एक साथ फलीभूत होती हैं।

यहाँ छवि विवरण दर्ज करें


6
मैं वास्तव में क्यों IEEE 754 पैसे के लिए काम नहीं करता है की एक और स्पष्टीकरण के लिए नहीं देख रहा था। मैंने ओपी में उल्लेख किया है कि इसे कहीं और समझाया गया है। इसी तरह, "शारीरिक उपयोग" शब्द का उपयोग करने का एक कारण है। अर्थात्, क्योंकि गैस की कीमतें, स्टॉक एक्सचेंज मूल्य आदि में मनमानी परिशुद्धता, भौतिक धन (और उपयोगकर्ता लेनदेन की विशाल संख्या) सैकड़ों जगह से आगे नहीं जा सकते हैं (और सॉफ्टवेयर के विभिन्न टुकड़े केवल उसी चीज का प्रतिनिधित्व करना चाहते हैं जिसके साथ भुगतान किया जा सकता है भौतिक धन)। जानकारी का एक टुकड़ा जो मैंने आश्चर्यचकित किया था कि क्या मुद्राएं मौजूद थीं जो अधिक दशमलव स्थानों में चली गईं।
कैट

3
फ्लोटिंग पॉइंट की "अजीबता" केवल आधेपन बनाम 1/10 वेंपन तक सीमित नहीं है। नाम में "फ्लोटिंग पॉइंट" पहलू भी कभी-कभी अप्रत्याशित परिणाम का कारण बनता है।
whatsisname

6
दशमलव से पहले यूके की मुद्रा पाउंड, शिलिंग और पेंस (£ sd) थी, £ 1 == 20s, 1s = 12d के साथ £ 1 = 240d इसलिए 1d = 0.0046666666666 .. ताकि दशमलव के रूप में भी प्रतिनिधित्व नहीं किया जा सके। यूरो में शामिल होने से पहले इतालवी लीरा 2346.4 (2001 में) में यूएस $ में शीर्ष पर थी, इसलिए वेतन और घर की कीमतों जैसी चीजें कभी-कभी एकल परिशुद्धता फ़्लोट की ऊपरी सीमा पर पहुंच जाती थीं और आर्थिक आंकड़े डबल्स के ऊपरी स्तरों को मार रहे थे।
स्टीव बार्न्स

2
मैं सिर्फ तर्क / संकेत दूंगा कि मुद्रा एक चीज है, और मूल्य दूसरी चीज है। आप कीमतों में $ 0.01 से अधिक परिशुद्धता हो सकते हैं, लेकिन आप उस सटीकता के साथ प्रभावी रूप से भुगतान नहीं कर सकते हैं।
माचादो

1
इसके अलावा, परिवार की तस्वीरें । पीएफटी। :)
मचाडो

10

मैं कुछ मुद्रा में राशियों का प्रतिनिधित्व करने के लिए पुस्तकालयों के बारे में कई प्रश्न पा सकता हूं।

"पुस्तकालय" अनावश्यक हैं जब तक कि आपकी भाषा के मानक पुस्तकालय में कुछ डेटा प्रकारों की कमी नहीं है, जैसा कि मैं समझाऊंगा।

निश्चित रूप से वास्तविक दुनिया के उपयोग में मुद्रा के बारे में जानने के लिए बहुत कुछ है। मुझे विशेष रूप से इस बात में दिलचस्पी है कि आपको भौतिक उपयोग में इसका प्रतिनिधित्व करने के लिए क्या जानना चाहिए (जैसे, डॉलर के साथ, आपके पास कभी भी 0.01 डॉलर से कम की सटीकता नहीं होती है, जो पूर्णांक संख्या के रूप में प्रतिनिधित्व की अनुमति देता है)।

काफी बस, आपको फिक्स्ड पॉइंट दशमलव चाहिए, फ्लोटिंग पॉइंट दशमलव नहीं। उदाहरण के लिए, जावा की बिगडेसिमल क्लास का उपयोग मुद्रा राशि को स्टोर करने के लिए किया जा सकता है। अन्य आधुनिक भाषाओं में इसी प्रकार के अंतर्निर्मित हैं, जिनमें C # और पायथन शामिल हैं । कार्यान्वयन अलग-अलग होते हैं, लेकिन वे आम तौर पर किसी संख्या को पूर्णांक के रूप में संग्रहीत करते हैं, दशमलव स्थान के साथ एक अलग डेटा सदस्य के रूप में। यह सटीक सटीकता प्रदान करता है, यहां तक ​​कि जब IEEE फ़्लोटिंग पॉइंट नंबरों के साथ विषम अवशेष (जैसे 0.0000001) दे रहे हैं।

विशेष रूप से, हमें कुछ मुद्रा में मूल्यों को संग्रहीत करने और इसे प्रिंट करने में सक्षम होने के लिए क्या जानने की आवश्यकता है?

कुछ महत्वपूर्ण बिंदु हैं।

  1. फ्लोटिंग पॉइंट के बजाय एक वास्तविक दशमलव प्रकार का उपयोग करें।

  2. समझें कि एक मुद्रा राशि के दो घटक हैं: एक मूल्य (5.63) और एक मुद्रा कोड या प्रकार (USD, CAD, GBP, EUR, एट अल)। कभी-कभी आप मुद्रा कोड को अनदेखा कर सकते हैं, अन्य बार यह महत्वपूर्ण है। क्या होगा यदि आप एक वित्तीय या खुदरा / ई-कॉमर्स प्रणाली पर काम कर रहे हैं जो कई मुद्राओं की अनुमति देता है? यदि आप सीएडी में एक ग्राहक से पैसे लेने की कोशिश कर रहे हैं तो क्या होगा, लेकिन वे एमएक्सएन के साथ भुगतान करना चाहते हैं? मुद्रा कोड और मुद्रा राशि के साथ आपको "मनी" प्रकार की आवश्यकता होती है ताकि इन मूल्यों को मिलाया जा सके (विनिमय दर भी, लेकिन मैं स्पर्शरेखा पर बहुत दूर नहीं जाना चाहता)। उसी समय, मेरे व्यक्तिगत वित्त सॉफ़्टवेयर को कभी भी इस बारे में चिंता करने की ज़रूरत नहीं है क्योंकि सब कुछ यूएसडी में है (यह मुद्राओं को मिला सकता है , लेकिन मुझे कभी भी ज़रूरत नहीं है)।

  3. जबकि एक मुद्रा में सबसे छोटी भौतिक इकाई हो सकती है (सीएडी और यूएसडी में सेंट है, जेपीवाई बस है ... येन) छोटा होना संभव है। CandiedOrange का उत्तर एक प्रतिशत के दसवें हिस्से में ईंधन की कीमतों को इंगित करता है। मेरी संपत्ति करों का मूल्यांकन प्रति डॉलर मिलों के रूप में किया जाता है, या दस प्रतिशत (एक अमरीकी डालर का 1/1000)। अपने आप को $ 0.01 तक सीमित न करें। जब आप उन मानों को अधिकांश समय प्रदर्शित कर सकते हैं , तो आपके प्रकारों को छोटे (ऊपर दिए गए दशमलव प्रकारों) को अनुमति देनी चाहिए।

  4. मध्यवर्ती गणना निश्चित रूप से एक प्रतिशत से अधिक परिशुद्धता की अनुमति देती है। मैंने खुदरा / ई-कॉमर्स सिस्टम पर काम किया है जहां आंतरिक मूल्यों को $ 0.00000001 में आंतरिक रूप से गोल किया गया था। अनंत परिशुद्धता आमतौर पर दशमलव प्रकारों (या एसक्यूएल) द्वारा समर्थित नहीं होती है, इसलिए इसमें कुछ सीमाएं होती हैं। उदाहरण के लिए, जावा के बिगडेसिमल का उपयोग करके 1/3 को विभाजित करने से एक RoundingMode या MathContext के बिना एक अपवाद फेंक दिया जाएगा क्योंकि मूल्य का बिल्कुल प्रतिनिधित्व नहीं किया जा सकता है।

    वैसे भी, कुछ मामलों में यह महत्वपूर्ण है। मान लें कि आपके पास उसकी खरीदारी की टोकरी में छह आइटम हैं, और वह जांच के लिए जाता है। आपके सिस्टम को कर की गणना करनी है, और ऐसा प्रति आइटम करता है क्योंकि वस्तुओं पर अलग-अलग कर लगाया जा सकता है। यदि आप प्रत्येक आइटम पर करों को गोल करते हैं, तो आपको लेनदेन / कार्ट स्तर पर पेनी राउंडिंग त्रुटियां मिल सकती हैं। इसे ठीक करने का एक तरीका यह हो सकता है कि प्रति आइटम अधिक दशमलव स्थानों पर करों को संग्रहीत किया जाए, पूरे लेनदेन के लिए कुल प्राप्त करें, और प्रत्येक आइटम को वापस करें और गोल करें ताकि कुल कर सही हो (शायद एक आइटम गोल, दूसरा नीचे)।

इस सब से महसूस करने के लिए महत्वपूर्ण बात यह है कि राउंडिंग पेनी के रूप में महत्वपूर्ण कुछ सही लोगों के लिए बहुत महत्वपूर्ण हो सकता है (जैसे मेरे पिछले कुछ ग्राहक जिन्हें अपने ग्राहकों की ओर से सरकारी बिक्री कर का भुगतान करना पड़ता था)। हालाँकि, ये सभी हल की गई समस्याएं हैं। उपरोक्त बिंदुओं को ध्यान में रखें और अपने दम पर कुछ प्रयोग करें, और आप सीखेंगे।


2 पर, मुझे लगता है कि विनिमय दर कम से कम अपनी संख्या पाने के लिए पर्याप्त है। आपको यह विचार करना होगा कि समय के साथ दरों में बदलाव होता है, जिसमें कुछ अलग तरीके होते हैं।
इज़्काता

2
+1। इसके अलावा, मुद्राएं समय के साथ बदलती रहती हैं। ब्राजील में हमने 80 और 90 के दशक में बार-बार मुद्रा परिवर्तन किया, जीरो को काटना और आउट-ऑफ-कंट्रोल मुद्रास्फीति के कारण आवश्यक होने पर मुद्रा का नाम बदलना। इसका मतलब है कि मुद्रा का हर पहलू समय के साथ बदल सकता है।
मचाडो

@ इज़्का निश्चित रूप से, मैंने उन प्रणालियों पर काम किया है जो मुद्राओं को बदलते हैं। मैं विषय पर स्पर्श करना चाहता था क्योंकि यह प्रासंगिक है। हालाँकि, यह सवाल का ध्यान केंद्रित नहीं है और मैं मुद्रा के आदान-प्रदान के विषय पर संभवतः एक और उत्तर लिख सकता हूं।

जब तक आपकी भाषा के मानक पुस्तकालय में कुछ डेटा प्रकारों की कमी नहीं होगी, "लाइब्रेरीज़" अनावश्यक हैं, जैसा कि मैं समझाता हूँ। ' मुद्राओं में आधे, चौथाई, दसवें, आठवें, आदि हो सकते हैं, जिसका अर्थ है कि हमें कम से कम उनके लिए एक दशमलव प्रतिनिधित्व की आवश्यकता है। लेकिन क्या हम पूरी तरह से निश्चित हैं कि 1/3-पूरे टुकड़े के साथ कोई मुद्रा नहीं है?
डैनियल मैक्लॉरी

4

एक जगह जहां बहुत सारे डेवलपर्स आईओएस एप्लिकेशन के लिए इन-ऐप खरीदारी के लिए एकल डेटा प्रतिनिधित्व के साथ सामना करते हैं। आपका ग्राहक दुनिया के लगभग किसी भी देश में एक स्टोर से जुड़ा हो सकता है। और उस स्थिति में, आपको एक डबल सटीक संख्या , और एक मुद्रा कोड से युक्त एक खरीद मूल्य दिया जाएगा ।

आपको यह पता होना चाहिए कि संख्या बड़ी हो सकती है। ऐसी मुद्राएं हैं जहां दस डॉलर से अधिक का कहना है कि 100,000 डॉलर है। और हम भाग्यशाली हैं कि फिलहाल जिम्बाब्वे डॉलर जैसी कोई मुद्रा नहीं है, जहां आप एक सौ ट्रिलियन बैंकनोट रख सकते हैं!

मुद्राओं को प्रदर्शित करने के लिए, आपको कुछ पुस्तकालय की आवश्यकता होगी - आपके पास यह सब ठीक करने का कोई मौका नहीं है। प्रदर्शन दो चीजों पर निर्भर करता है: मुद्रा कोड, और उपयोगकर्ता का स्थान। सोचें कि अमेरिकी डॉलर और कनाडाई डॉलर को अमेरिकी लोकल और कनाडाई लोकेल के साथ कैसे प्रदर्शित किया जाएगा: यूएसए में, आपके पास $ vs CAN $ है, और कनाडा में आपके पास US $ बनाम $ है। आशा है कि ओएस में बनाया गया है, या आपके पास एक अच्छा पुस्तकालय है।

गणना के लिए, कोई भी गणना एक गोल चरण के साथ समाप्त हो जाएगी। आपको यह पता लगाना होगा कि आपको कानूनी रूप से उस दौर को कैसे पूरा करना है । यह एक प्रोग्रामिंग समस्या नहीं है, यह एक कानूनी समस्या है। उदाहरण के लिए, यदि आप यूके में वैट की गणना करते हैं, तो आपको प्रति आइटम या आइटम लाइन पर कर की गणना करनी होगी, और इसे पेनीज़ के लिए गोल करना होगा। आप मुद्रा पर निर्भर होने के लिए क्या गोल करते हैं। लेकिन नियम स्पष्ट रूप से देश पर निर्भर करते हैं। आप यह उम्मीद नहीं कर सकते हैं कि यूके में कानूनी रूप से सही होने वाली गणना जापान में कानूनी रूप से सही होगी और इसके विपरीत।


0

विशेष रूप से, हमें कुछ मुद्रा में मूल्यों को संग्रहीत करने और उन्हें प्रिंट करने में सक्षम होने के लिए क्या जानने की आवश्यकता है?

  • "मूल्यों को संग्रहीत करने के लिए" : एक निश्चित-बिंदु संख्या डेटा प्रकार और एक मुद्रा प्रकार। मुझे लगता है कि ये बहुत स्पष्ट हैं। गैर-नियत-बिंदु संख्या पर संग्रहीत करने में कुछ गोलाई शामिल हो सकती है और मूल्य बदल सकता है। मुद्रा गणना एक अलग मुद्दा होगा।
  • "उन्हें प्रिंट आउट करने के लिए" : उपयोगकर्ता स्थान। यदि आप भाग्यशाली हैं, तो आपको सब कुछ करने के लिए मानक पुस्तकालय मिलता है, जैसे मुद्रा प्रतीक, हजार विभाजक, दशमलव विभाजक, परिशुद्धता, आदि।

स्थानीय से संबंधित कुछ उदाहरण मुद्दे:

  • US लोकल में 100 USD $ 100.00 होना चाहिए, अन्य लोकेल में डॉट के रूप में दशमलव विभाजक US $ 100.00 होगा।
  • कुछ देशों में हजार से समूह संख्या के बजाय असंख्य का उपयोग किया जाता है, जैसे कि 10,000.00 के बजाय यह सिर्फ 1,0000.00 होगा
  • व्यावहारिक कारणों से, लोग छोटी मुद्राओं के लिए सभी नंबरों को प्रिंट नहीं करते हैं, उदाहरण के लिए $ 1,000,000,000.00 के बजाय, वे चाहते हैं कि आप $ 1 बिलियन प्रिंट करें।

एक अन्य संभावित मुद्दा यह भी है कि यदि आप मुद्रा को निश्चित बिंदु संख्या में सही ढंग से संग्रहित करते हैं, तो इसे फ्लोटिंग पॉइंट नंबर में बदलने की आवश्यकता हो सकती है क्योंकि मुद्रण के लिए उपयोग की जाने वाली लाइब्रेरी केवल फ़्लोटिंग पॉइंट का समर्थन करती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.