कैसे एक डाली एक करता है double
करने के लिए decimal
जो जब मुद्रा विकास कर रही है प्रयोग किया जाता है। कहाँ जाता है M
?
decimal dtot = (decimal)(doubleTotal);
जवाबों:
आप केवल M
एक संख्यात्मक शाब्दिक के लिए उपयोग करते हैं , जब आप इसे डालते हैं:
decimal dtot = (decimal)doubleTotal;
ध्यान दें कि एक फ़्लोटिंग पॉइंट संख्या एक सटीक मान रखने के लिए अनुकूल नहीं है, इसलिए यदि आप पहली बार एक साथ संख्याएँ जोड़ते हैं और फिर आपको परिवर्तित करते Decimal
हैं तो आपको गोल त्रुटियाँ मिल सकती हैं। आप संख्याओं को Decimal
एक साथ जोड़ने से पहले परिवर्तित करना चाहते हैं, या यह सुनिश्चित कर सकते हैं कि संख्याएँ पहले स्थान पर फ़्लोटिंग संख्याएँ नहीं हैं।
M
शाब्दिक प्रत्यय की आवश्यकता के बिना आप इस तरह एक दशमलव में एक डबल कास्ट कर सकते हैं :
double dbl = 1.2345D;
decimal dec = (decimal) dbl;
M
नया शाब्दिक दशमलव मान घोषित करते समय आपको इसका उपयोग करना चाहिए :
decimal dec = 123.45M;
( M
123.45 के बिना , एक डबल के रूप में माना जाता है और संकलन नहीं करेगा।)
डिफ़ॉल्ट कनवर्ज़न क्लास का उपयोग करें: Convert.ToDecimal(Double)
Convert.ToDecimal(the double you are trying to convert);
double
करने के लिए decimal
, यह देखते हुए कि एक के लिए double
(1,000,000.0 / 3.0) की तरह मूल्य एक होगा कुछ मामलों में 333333.333333333D उपज देने वाली "अधिकता" को क्लिप करना चाहते हैं, लेकिन दूसरों के मामलों में कोई भी इसे बनाए रखना चाहेगा, 333333.333333333313931D। केवल "दशमलव में कनवर्ट करें" कहने के बजाय, कोड को यह निर्दिष्ट करना चाहिए कि रूपांतरण कैसे किया जाना चाहिए।
Convert.ToDecimal(double)
के लिए समान है (decimal)doubleTotal
, सिवाय इसके कि अगर doubleTotal
किसी भिन्न प्रकार को बदल दिया जाए तो आप एक संकलन-समय की त्रुटि से बचेंगे और एक कठिन-टू-रन रन-टाइम त्रुटि का परिचय देंगे क्योंकि एक अलग TODimalimal ओवरराइड कहा जा सकता है। कास्ट ऑपरेटर बहुत अधिक स्पष्ट है ...
खैर यह एक पुराना प्रश्न है और मैंने यहाँ दिखाए गए कुछ उत्तरों का वास्तव में उपयोग किया है। फिर भी, मेरे विशेष परिदृश्य में यह संभव था कि जिस double
मूल्य को मैं परिवर्तित करना चाहता decimal
था, वह अक्सर उससे बड़ा था decimal.MaxValue
। इसलिए, मैंने अपवादों को संभालने के बजाय यह विस्तार विधि लिखी:
public static decimal ToDecimal(this double @double) =>
@double > (double) decimal.MaxValue ? decimal.MaxValue : (decimal) @double;
उपरोक्त दृष्टिकोण काम करता है यदि आप अतिप्रवाह अपवादों को संभालने से परेशान नहीं करना चाहते हैं और अगर ऐसा कुछ होता है तो आप अधिकतम संभव मूल्य (मेरा मामला) रखना चाहते हैं, लेकिन मुझे पता है कि कई अन्य परिदृश्यों के लिए यह अपेक्षित व्यवहार नहीं होगा। और अपवाद हो सकता है कि हैंडलिंग की आवश्यकता होगी।