2008-09-18 12 views
23

0 #और Decimal.Parse(string) के बीच सी # में अंतर क्या है?Convert.ToDecimal (स्ट्रिंग) और दशमलव के बीच अंतर। पर्स (स्ट्रिंग)

आप किस परिदृश्य में एक दूसरे का उपयोग करेंगे?

प्रदर्शन पर इसका क्या प्रभाव पड़ता है?

दोनों के बीच चयन करते समय मुझे अन्य कारकों पर विचार करना चाहिए?

उत्तर

36
bytes.com से

:

Convert वर्ग लिए बनाया गया है प्रकार की एक विस्तृत श्रृंखला कनवर्ट करते हैं, तो आप अधिक प्रकार आप Decimal.Parse साथ कर सकते हैं की तुलना में दशमलव में बदल सकते हैं, जो केवल सौदा कर सकते हैं स्ट्रिंग के साथ। अन्य हाथ दशमलव पर। पर्स आपको एक संख्या स्टाइल निर्दिष्ट करने की अनुमति देता है।

दशमलव और दशमलव उपनाम हैं और बराबर हैं।

कनवर्ट करने के लिए। टोडेसीमल (स्ट्रिंग), दशमलव। पर्स को आंतरिक रूप से कहा जाता है।

मोर्टेन Wennevik [सी # एमवीपी]

Decimal.Parse के बाद से Convert.ToDecimal द्वारा आंतरिक रूप से कहा जाता है, यदि आप चरम प्रदर्शन की आवश्यकताओं को आप Decimal.Parse पर कायम करना चाह सकते हैं है, यह होगा एक ढेर फ्रेम बचाओ।

+1

बेशक, कनवर्ट करें। टूडेसिमल और/या दशमलव। पर्स संकलन के दौरान या यहां तक ​​कि जेआईटी के दौरान भी रेखांकित हो जाता है। IOW, ~~ शुद्धता ~~ – sehe

3

मूल विषय से संबंधित एक आम सुझाव - कृपया TryParse() का उपयोग करें जैसे ही आप वास्तव में सुनिश्चित नहीं हैं कि इनपुट स्ट्रिंग पैरामीटर सही संख्या प्रारूप प्रतिनिधित्व होगा।

15

एक कारक जिसे आपने नहीं सोचा था Decimal.TryParse विधि है। Convert.ToDecimal और Parse दोनों अपवाद फेंक देते हैं यदि वे स्ट्रिंग को उचित दशमलव प्रारूप में परिवर्तित नहीं कर सकते हैं। TryParse विधि आपको इनपुट सत्यापन के लिए एक अच्छा पैटर्न देता है।

decimal result; 
if (decimal.TryParse("5.0", out result)) 
    ; // you have a valid decimal to do as you please, no exception. 
else 
    ; // uh-oh. error message time! 

यह पैटर्न बहुत अविश्वसनीय रूप से त्रुटि की जाँच उपयोगकर्ता इनपुट के लिए भयानक है।

41

वहाँ एक महत्वपूर्ण ध्यान में रखना अंतर है:

Convert.ToDecimal0 वापस आ जाएगी अगर यह एक null स्ट्रिंग दिया जाता है।

decimal.ParseArgumentNullException फेंक देगा यदि आप जिस स्ट्रिंग को पार्स करना चाहते हैं वह null है।

0

Convert.ToDecimal(string) और Decimal.Parse(string) के बीच प्रमुख अंतर यह है कि Convert संभालती Null अन्य एक अपवाद फेंकता है जबकि

नोट है: यह रिक्त स्ट्रिंग संभाल नहीं होंगे।

0

कनवर्ट करें। टोडडिमल स्पष्ट रूप से 0 वापस नहीं आता है।मेरी LINQ बयान में

var query = from c in dc.DataContext.vw_WebOrders 
select new CisStoreData() 
{ 
     Discount = Convert.ToDecimal(c.Discount) 
}; 

डिस्काउंट अभी भी एक दशमलव से परिवर्तित करने के बाद रिक्त है? वह शून्य है। हालांकि, एक लिंक कथन के बाहर, मुझे एक ही रूपांतरण के लिए 0 मिलता है। निराशाजनक और कष्टप्रद।

संबंधित मुद्दे