2010-08-24 34 views
6

को नाव कन्वर्ट करने के लिए कोशिश कर रहा है, समारोह सिर्फ इस बयान पर रुकती है:Convert.ToInt32 (नाव) में विफल रहता है जब कोई अपवाद नहीं फेंक दिया जाता है Int32

int productQuantity = Convert.ToInt32("1.00"); 

और रिटर्न।

इस फ्लोट को Int32 में बदलने के लिए मैं क्या कर रहा हूं?

नोट: मैं BackgroundWorkerThread में चल रहा हूं।

+5

यह एक स्ट्रिंग है, न कि एक फ्लोट। – NullUserException

+0

@NullUserException: हाँ, लेकिन मैंने पहले परिवर्तित कर दिया है अगर यह दशमलव के बिना "1" है। –

उत्तर

8

इस मामले में एक अपवाद फेंक दिया जा रहा है, यह सिर्फ डीबगर में सामने नहीं आया है। यह स्ट्रिंग एक प्रारूप में नहीं है जो परिवर्तनीय है Int32 प्रकार और इसलिए फेंकता है और अपवाद। यदि आईडीई सहयोग नहीं कर रहा है तो आप कोशिश/पकड़ ब्लॉक में इसे लपेटकर इसे सत्यापित कर सकते हैं।

स्ट्रिंग को double पर कनवर्ट करने के लिए शायद सबसे अच्छा तरीका संभवतः int पर डाला गया है। यह सटीक मतभेदों के कारण डेटा हानि का दरवाजा खोलता है। लेकिन आपका इनपुट एक फ्लोट स्टाइल प्रारूप में है, यदि आप अंतिम उत्पाद int

+1

असुरक्षित अपवाद पर +1 अच्छे अंक, भूलना आसान है! स्ट्रिंग्स के साथ – Abel

0

स्वरूप अपवाद इनपुट स्ट्रिंग सही प्रारूप में नहीं थी, तो यह अपरिहार्य है।

2

एक अपवाद फेंक दिया गया है, यह सिर्फ यह देखने के लिए है कि आपको BackgroundWorker.RunWorkerCompleted के लिए ईवेंट हैंडलर में RunWorkerCompletedEventArgs.Error संपत्ति का निरीक्षण करना होगा।

पृष्ठभूमि कार्यकर्ता के धागे से फेंक दिया गया कोई अपवाद उस संपत्ति को सौंपा गया है।

6

आपको इसे पहले double में परिवर्तित करने की आवश्यकता है, और फिर Int32 पर कनवर्ट करें।

int productQuantity = Convert.ToInt32(double.Parse("1.00")); 
+0

मैं हमेशा 'TryParse' का उपयोग करने की अनुशंसा करता हूं, आपको बहुत सारी परेशानी बचाता है। – Abel

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