C# में Decimal बनाम Double: क्या चुनें और कब? 2025 गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C# में Decimal बनाम Double: सटीकता की लड़ाई (और आपकी नसें)

\n\n

क्या आपने कभी वेतन कैलकुलेटर या, मान लीजिए, एक बॉल फ्लाइट सिम्युलेटर लिखा है, और अचानक अपेक्षित 0.3 के बजाय 0.30000000000000004 मिला? यदि हाँ — तो क्लब में आपका स्वागत है। सवाल "decimal vs double! - Which one should I use and when?" Stack Overflow पर सबसे लोकप्रिय में से एक है, और यह व्यर्थ नहीं है। ऐसा लगता है कि यह फ्लोटिंग-पॉइंट संख्याओं के दो प्रकारों के बीच एक साधारण चुनाव है। लेकिन वास्तव में यह वित्तीय आपदा और वैज्ञानिक सटीकता (या इसके विपरीत) के बीच का चुनाव है।

\n\n

इस लेख में हम इस शाश्वत बहस को हमेशा के लिए सुलझा देंगे। आप जानेंगे कि C# में decimal प्रकार double प्रकार से कैसे भिन्न है, कहाँ किसका उपयोग करना है और सबसे महत्वपूर्ण बात — 2025 में गलती कैसे न करें। चलिए शुरू करते हैं!

\n\n

संक्षेप में मुख्य बात: हुड के नीचे क्या छिपा है?

\n\n

इससे पहले कि हम तर्क फेंकना शुरू करें, आइए विनिर्देशन पर एक नज़र डालें। प्रत्येक प्रकार की अपनी वास्तुकला होती है, और यही निर्धारित करती है कि वह कहाँ राजा होगा और कहाँ बहिष्कृत।

\n\n

Double (उर्फ System.Double)

\n
    \n
  • आकार: 64 बिट (8 बाइट)।
  • \n
  • सटीकता: लगभग 15-17 महत्वपूर्ण अंक।
  • \n
  • सीमा: विशाल (±5.0 × 10−324 से ±1.7 × 10308 तक)।
  • \n
  • प्रतिनिधित्व: IEEE 754 मानक (बाइनरी) के अनुसार फ्लोटिंग पॉइंट।
  • \n
  • प्रदर्शन: उच्च। प्रोसेसर double के साथ काम करने के लिए अनुकूलित होते हैं।
  • \n
\n\n

Decimal (उर्फ System.Decimal)

\n
    \n
  • आकार: 128 बिट (16 बाइट)।
  • \n
  • सटीकता: 28-29 महत्वपूर्ण अंक।
  • \n
  • सीमा: कम (±1.0 × 10−28 से ±7.9 × 1028 तक)।
  • \n
  • प्रतिनिधित्व: दशमलव (मूलतः, दशमलव बिंदु शिफ्ट के साथ एक पूर्णांक)।
  • \n
  • प्रदर्शन: कम। CPU पर कोई हार्डवेयर समर्थन नहीं, सभी गणनाएँ सॉफ्टवेयर आधारित हैं।
  • \n
\n\n

मुख्य अंतर जो याद रखना चाहिए: double एक बाइनरी भिन्न है, जबकि decimal एक दशमलव भिन्न है। यही कारण है कि प्रसिद्ध "राउंडिंग त्रुटियाँ" उत्पन्न होती हैं।

\n\n

Double पैसे क्यों "खराब" करता है, लेकिन विज्ञान के लिए आदर्श क्यों है?

\n\n

कल्पना करें कि आप संख्या 0.1 को बाइनरी सिस्टम में लिखने का प्रयास कर रहे हैं। यह एक अनंत आवर्ती भिन्न होगी: 0.0001100110011...। कंप्यूटर इसे काट देता है, और एक छोटी लेकिन महत्वपूर्ण त्रुटि उत्पन्न होती है। वैज्ञानिक गणनाओं (मौसम सिमुलेशन, भौतिकी, ग्राफिक्स) के लिए, यह त्रुटि जमा होती है, लेकिन स्वीकार्य सीमा के भीतर होती है। वित्त के लिए — यह लाखों उपयोगकर्ताओं से "चुराया गया" एक पैसा है।

\n\n

Decimal संख्या को पूर्णांक के रूप में संग्रहीत करता है (उदाहरण के लिए, 1/10 = 0.1 को पूर्णांक 1 और इस जानकारी के रूप में संग्रहीत किया जाता है कि दशमलव बिंदु को एक स्थान स्थानांतरित करने की आवश्यकता है)। इसलिए दशमलव भिन्नों के लिए decimal की सटीकता आदर्श है।

\n\n

C# में decimal का उपयोग कब करें? (स्पॉयलर: पैसे के लिए)

\n\n

सुनहरा नियम जो आपके प्रोजेक्ट को बचाएगा: वित्तीय, मौद्रिक और लेखा गणनाओं के लिए decimal का उपयोग करें। यदि आपके वेरिएबल में रुपये, डॉलर, ऋण ब्याज या जीएसटी है — तो आपकी पसंद स्पष्ट है।

\n\n

यहाँ एक उदाहरण है कि double बटुए के लिए बुराई क्यों है:

\n\n
using System;\n\npublic class MoneyExample\n{\n    public static void Main()\n    {\n        // double के साथ खराब उदाहरण\n        double price = 10.99;\n        double tax = 0.07;\n        double totalDouble = price + (price * tax);\n        Console.WriteLine($"Double total: {totalDouble}"); // 11.759300000000001 दे सकता है\n\n        // decimal के साथ अच्छा उदाहरण\n        decimal priceDec = 10.99m;\n        decimal taxDec = 0.07m;\n        decimal totalDec = priceDec + (priceDec * taxDec);\n        Console.WriteLine($"Decimal total: {totalDec}"); // सटीक: 11.7593\n    }\n}
\n\n

यह "अतिरिक्त

ब्लॉग

पुस्तक अनुशंसाएँ