c# - दशमलव बनाम डबल!-मुझे किस का उपयोग करना चाहिए और कब?




double decimal (5)

मेरा सवाल यह है कि जब एक डबल का उपयोग करना चाहिए और मुझे दशमलव प्रकार का उपयोग कब करना चाहिए?

decimal लिए जब आप 10 ^ (+/- 28) की सीमा में मूल्यों के साथ काम करते हैं और जहां बेस 10 प्रस्तुतियों के आधार पर व्यवहार के बारे में आपकी अपेक्षाएं होती हैं - मूल रूप से धन।

जब आपको सापेक्ष सटीकता की आवश्यकता होती है (यानी बड़े मूल्यों पर पीछे वाले अंकों में सटीकता खोना कोई समस्या नहीं है) जंगली रूप से अलग-अलग परिमाणों में - 10 ^ (+/- 300) से अधिक double कवर करता है। वैज्ञानिक गणना यहां सबसे अच्छा उदाहरण हैं।

किस प्रकार पैसे गणना के लिए उपयुक्त है?

दशमलव, दशमलव , दशमलव

कोई विकल्प स्वीकार करें।

सबसे महत्वपूर्ण कारक यह है कि double , बाइनरी अंश के रूप में कार्यान्वित किया जा रहा है, बिल्कुल decimal (जैसे 0.1) का सटीक रूप से प्रतिनिधित्व नहीं कर सकता है और अंकों की कुल संख्या 64-बिट चौड़ी बनाम 128-बिट decimal लिए छोटी है। अंत में, वित्तीय अनुप्रयोगों को अक्सर विशिष्ट राउंडिंग मोड का पालन करना होता है (कभी-कभी कानून द्वारा अनिवार्य)। decimal इन का समर्थन करता है ; double नहीं करता है।

इस प्रश्न का उत्तर यहां दिया गया है:

मैं सी # में युगल का उपयोग कर लोगों को देख रहा हूं। मुझे पता है कि मैंने कहीं पढ़ा है कि युगल कभी-कभी सटीकता खो देते हैं। मेरा सवाल यह है कि जब एक डबल का उपयोग करना चाहिए और मुझे दशमलव प्रकार का उपयोग कब करना चाहिए? पैसा गणना के लिए कौन सा प्रकार उपयुक्त है? (यानि $ 100 मिलियन से अधिक)


दशमलव सटीक मूल्यों के लिए है। अनुमानित मूल्यों के लिए डबल है।

USD: $12,345.67 USD (Decimal)
CAD: $13,617.27 (Decimal)
Exchange Rate: 1.102932 (Double)

पैसे के लिए: decimal । यह थोड़ा और मेमोरी खर्च करता है, लेकिन कभी-कभी double तरह घूमने वाली परेशानी नहीं होती है।



निश्चित रूप से अपने पैसे की गणना के लिए पूर्णांक प्रकार का उपयोग करें। इसे पर्याप्त जोर नहीं दिया जा सकता है, क्योंकि पहली नज़र में ऐसा लगता है कि एक फ्लोटिंग पॉइंट प्रकार पर्याप्त है।

यहां पाइथन कोड में एक उदाहरण है:

>>> amount = float(100.00) # one hundred dollars
>>> print amount
100.0
>>> new_amount = amount + 1
>>> print new_amount
101.0
>>> print new_amount - amount
>>> 1.0

बहुत सामान्य लग रहा है।

अब इसे 10 ^ 20 जिम्बाब्वे डॉलर के साथ पुनः प्रयास करें

>>> amount = float(1e20)
>>> print amount
1e+20
>>> new_amount = amount + 1
>>> print new_amount
1e+20
>>> print new_amount-amount
0.0

जैसा कि आप देख सकते हैं, डॉलर गायब हो गया।

यदि आप पूर्णांक प्रकार का उपयोग करते हैं, तो यह ठीक काम करता है:

>>> amount = int(1e20)
>>> print amount
100000000000000000000
>>> new_amount = amount + 1
>>> print new_amount
100000000000000000001
>>> print new_amount - amount
1






currency