सी # में, मौद्रिक राशि का प्रतिनिधित्व करने के लिए मुझे किस डेटा प्रकार का उपयोग करना चाहिए? दशमलव? फ्लोट? डबल? सटीक, राउंडिंग, आदिसी # में पैसे का प्रतिनिधित्व करने के लिए मुझे किस डेटा प्रकार का उपयोग करना चाहिए?
उत्तर
उपयोग System.Decimal
:: मैं विचार में ले जाना चाहते
दशमलव मान प्रकार दशमलव से सकारात्मक 79.228.162.514.264.337.593.543.950.335 नकारात्मक 79.228.162.514.264.337.593.543.950.335 के बीच की संख्याएं प्रतिनिधित्व करता है। दशमलव मान प्रकार महत्वपूर्ण अभिन्न और दशमलव अंक की बड़ी संख्या है और कोई दौर बंद त्रुटियों की आवश्यकता होती है वित्तीय गणना के लिए उपयुक्त है। दशमलव प्रकार गोल करने की आवश्यकता को खत्म नहीं करता है। इसके बजाय, यह राउंडिंग के कारण त्रुटियों को कम करता है।
न तो System.Single
(float
) है और न ही System.Double
(double
) सटीक पर्याप्त उच्च परिशुद्धता चल त्रुटियों गोलाई बिना बिन्दु संख्या का प्रतिनिधित्व करने में सक्षम हैं।
Decimal वह वही है जिसे आप चाहते हैं।
यदि आप SQL का उपयोग कर रहे हैं तो डीबी में दशमलव और धन का उपयोग करें।
सी # में, दशमलव प्रकार वास्तव में आधार 10 में सभी गणित और तुलना संचालन के लिए अधिभारित कार्यों के साथ एक संरचना है, इसलिए इसमें कम महत्वपूर्ण गोलियां त्रुटियां होंगी। दूसरी तरफ एक फ्लोट (और डबल) बाइनरी में वैज्ञानिक नोटेशन के समान है। नतीजतन, जब आप आवश्यक परिशुद्धता जानते हैं तो दशमलव प्रकार अधिक सटीक होते हैं।
भागो यह 2 की सटीकता में अंतर को देखने के लिए:
using System;
using System.Collections.Generic;
using System.Text;
namespace FloatVsDecimal
{
class Program
{
static void Main(string[] args)
{
Decimal _decimal = 1.0m;
float _float = 1.0f;
for (int _i = 0; _i < 5; _i++)
{
Console.WriteLine("float: {0}, decimal: {1}",
_float.ToString("e10"),
_decimal.ToString("e10"));
_decimal += 0.1m;
_float += 0.1f;
}
Console.ReadKey();
}
}
}
Money Type for the CLR उपयोग पर विचार करें। यह एक कस्टम वैल्यू टाइप (स्ट्रक्चर) है जो मुद्राओं और समस्याओं को हल करने के लिए हैंडल का भी समर्थन करता है।
2 साल पहले कोई रीडमे, दस्तावेज़, और अनमोल पीआरएस ... –
मैं "सी # के माध्यम से अनुकूली कोड" पुस्तक (2014 से) पढ़ रहा था और यह कहता है: "दशमलव प्रकार का उपयोग करने की सलाह नहीं दी जाती है मुद्रा मूल्यों का प्रतिनिधित्व करें (...)। इसके बजाय एक धन (उपरोक्त में उल्लिखित यूआरएल) का उपयोग किया जाना चाहिए। मैं उलझन में था क्योंकि मुझे हमेशा दशमलव का उपयोग करने के लिए कहा गया था। लेखक का तर्क नहीं है कि हमें क्यों नहीं करना चाहिए दशमलव का उपयोग करें। उस पर आधारित और जॉर्ज ने क्या लिखा, मुझे लगता है कि दशमलव जाने का रास्ता है। – Marshall
सी # में आपको मौद्रिक मात्रा का प्रतिनिधित्व करने के लिए "दशमलव" लेना चाहिए।
- 1. मौद्रिक मूल्यों को संग्रहीत करने के लिए मुझे किस डेटा-प्रकार का उपयोग करना चाहिए?
- 2. कोर डेटा में GUID स्टोर करने के लिए मुझे किस डेटा प्रकार का उपयोग करना चाहिए?
- 3. सी # और एसक्यूएल सर्वर में प्रतिशत का प्रतिनिधित्व करने के लिए मुझे किस प्रकार का उपयोग करना चाहिए?
- 4. मुद्रा/धन के लिए मुझे किस XML डेटा प्रकार का उपयोग करना चाहिए?
- 5. पैसे के प्रतिनिधित्व के लिए किस वर्ग का उपयोग करना है?
- 6. मुझे किस डीबी का उपयोग करना चाहिए?
- 7. मुझे किस प्रकार का संग्रह उपयोग करना चाहिए?
- 8. तालिका पंक्तियों को रखने के लिए मुझे किस प्रकार की डेटा संरचना का उपयोग करना चाहिए?
- 9. मुझे किस पायथन का उपयोग करना चाहिए?
- 10. वेबसाइट बनाने के लिए मुझे किस प्रकार का उपयोग करना चाहिए
- 11. मुझे किस प्रकार का अपवाद फेंकना चाहिए?
- 12. एकाधिक रूपांतरणों को करने के लिए मुझे किस WPF छवि प्रकार का उपयोग करना चाहिए
- 13. अपनी खुद की "बिगइंटर" कक्षा बनाने के लिए मुझे किस डेटा-स्ट्रक्चर का उपयोग करना चाहिए?
- 14. रिकॉर्ड को संग्रहीत करने के लिए मुझे किस डेटाबेस का उपयोग करना चाहिए, और मुझे इसका उपयोग कैसे करना चाहिए?
- 15. मुझे किस वीएमवेयर एपीआई का उपयोग करना चाहिए?
- 16. आईओएस प्रोजेक्ट के लिए सी में फ़ाइल नाम स्ट्रिंग के लिए मुझे किस प्रकार का उपयोग करना चाहिए?
- 17. उद्देश्य-सी/आईओएस में पैसे का प्रतिनिधित्व कैसे करें?
- 18. HTTP क्लाइंट को लागू करने के लिए मुझे किस सी ++ लाइब्रेरी का उपयोग करना चाहिए?
- 19. सी # मुझे किस प्रकार का अपवाद उठाना चाहिए?
- 20. एनएलटीके में मुझे किस शब्द स्टेमर का उपयोग करना चाहिए?
- 21. जियोकोडिंग के लिए मुझे किस डेटा संरचना का उपयोग करना चाहिए?
- 22. वीआईएम में मुझे किस मोड़ का उपयोग करना चाहिए?
- 23. उद्देश्य-सी में, एनएसईएक्सप्शन के अपवाद नाम के लिए मुझे किस नाम का उपयोग करना चाहिए?
- 24. मुझे किस गेम इंजन का उपयोग करना चाहिए?
- 25. सील क्यूब डिटेक्शन के लिए मुझे किस तरह का वर्णनकर्ता का उपयोग करना चाहिए?
- 26. सीएसएस में मुझे किस कोटेशन मार्क का उपयोग करना चाहिए?
- 27. क्या मुझे स्थिर डेटा सदस्यों का उपयोग करना चाहिए? (सी ++)
- 28. गुई टूलकिट, मुझे किस का उपयोग करना चाहिए?
- 29. मुझे किस कोड का उपयोग करना चाहिए, CodeContract या CuttingEdge.Conditions?
- 30. छवि को सहेजने के लिए मुझे किस चर प्रकार का उपयोग करना चाहिए?
मैंने इसे ऊपर उठाया है, लेकिन मैं अंतिम दावा के साथ समस्या उठाता हूं। ऐसा नहीं है कि फ्लोट/डबल पर्याप्त सटीक नहीं हैं - यह सिर्फ इतना है कि वे पैसे के लिए अनुचित आधार का उपयोग करते हैं। आपके पास दशमलव से अधिक वास्तविक * सटीक * के साथ 512 बिट फ़्लोटिंग बाइनरी पॉइंट मान हो सकता है - लेकिन यह अभी भी उचित नहीं होगा क्योंकि यह 0.1 मानों के दशमलव मानों का प्रतिनिधित्व नहीं कर सका। –
मेरी गलती - मैंने अपने जवाब में मिश्रित अर्थ। मैंने अपने अंतिम बयान में "सटीक" का अर्थ "गणितीय परिशुद्धता" का अर्थ नहीं दिया बल्कि यह व्यक्त करने के लिए कि एक गोलाकार संख्या (इस उदाहरण में 1) (0.9 99 99_) से "कम सटीक" है जब चर को आवंटित संख्या वास्तव में थी 0.9999_। मेरे हिस्से पर शब्दों की खराब पसंद ... –
हां, यहां तक कि एक फ्लोट _precise_ पर्याप्त है। समस्या तब होती है जब दशमलव से बाइनरी और पीछे परिवर्तित हो जाती है। दो अलग-अलग अड्डों में अपरिमेय संख्याओं के अलग-अलग सेट होते हैं। – Nosredna