2012-03-22 19 views
5

मैं अगर एक चर रहा है डेटा प्रकार double की है जांच करने की आवश्यकता डेटा प्रकार का है। यह मैं क्या करने की कोशिश की है:जांच की जा रही है, तो एक चर डबल

try 
{ 
    double price = Convert.ToDouble(txtPrice.Text); 
} 
catch (FormatException) 
{ 
    MessageBox.Show("Product price is not a valid price", "Product price error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    return false; 
} 

मुझे लगा कि यह काम करेगा, लेकिन स्पष्ट रूप से, मुझे पता करने में विफल रहा है, तो txtPrice.Text उस में एक नंबर के अलावा और कुछ, Convert वर्ग बस इसे बाहर पार्स जाएगा था।

मैं realiably जांच कैसे करूं कि एक चर एक डबल है?

+0

"चर" गलत शब्द है। आप यह निर्धारित करने की कोशिश कर रहे हैं कि पाठ को फ़्लोटिंग-पॉइंट मान में परिवर्तित किया जा सकता है या नहीं। यदि आप एक चर के प्रकार का निर्धारण कर रहे थे, तो आप variable.GetType() == टाइपफ़ोफ़ (डबल) – Brannon

उत्तर

23

इस का उपयोग करें:

double price; 
bool isDouble = Double.TryParse(txtPrice.Text, out price); 
if(isDouble) { 
    // double here 
} 
+0

का उपयोग करेंगे, यह बेहतर है, लेकिन अगर मैं कीमत के रूप में "qwerty" दर्ज करता हूं तो यह अभी भी इसे देता है। हालांकि, अगर मैं इसे खाली छोड़ देता हूं तो यह इसे पकड़ता है। –

+0

tryparse द्वारा दिए गए बूल परिणाम का उपयोग करें – ionden

3

उपयोग Double.TryParse method:

double price; 
if (Double.TryParse(txtPrice.Text, out price)) 
{ 
    Console.WriteLine(price); 
} 
else 
{ 
    Console.WriteLine("Not a double!"); 
} 
0

आप अगर यह वैध है की जाँच करने के

  • double.ParseExact या
  • उपयोग regex का उपयोग कर सकते हैं।
0

तो अगर मैं आपके सवाल का अधिकार मिलता है, तो आप इसका मतलब यह है कि आप केवल संख्या सही देना चाहते हैं? यदि यह सत्य है, तो शायद यह आपकी मदद करेगा।

string Str = textBox1.Text.Trim(); 
double Num; 
bool isNum = double.TryParse(Str, out Num); 
if (isNum) 
MessageBox.Show(Num.ToString()); 
else 
MessageBox.Show("Invalid number"); 
0

आप double.TryParse() उपयोग कर सकते हैं यह false वापसी अगर यह एक डबल नहीं बना सका होगा।

0

तुम सिर्फ का उपयोग नहीं किया जा सका:

double.Parse(txtPrice.Text); 

?

इसके साथ आप एक प्रारूप अपवाद कहेंगे "इनपुट स्ट्रिंग सही प्रारूप में नहीं थी।" यदि स्ट्रिंग मान एक डबल नहीं है, जो वास्तव में वैसे भी होता है जो आप मैन्युअल रूप से कर रहे थे।

1

तुम क्यों न कुछ इस तरह की कोशिश -

double doubleVar; 
    if(typeof(doubleVar) == double) { 
     printf("doubleVar is of type double!"); 
    } 

यह आसानी से अगर चर एक प्रकार पर दो की है देख सकते हैं।

7

मैं वास्तव में जांच कर सकता हूं कि कोई चर एक डबल है या नहीं?

आप क्या आप वास्तव में यहां यही प्रयास कर रहे हैं के बारे में स्पष्ट होना चाहिए। मुझे नहीं लगता कि आप पूछ रहे हैं कि आप क्या सोच रहे हैं, और शब्दावली में मतभेदों के बारे में जागरूक होने के लायक हैं।

आप एक चर जो, घोषित प्रकार double का हो रहा है तो यह निश्चित रूप से एक double है मिल गया है, तो।आप एक चर किस प्रकार object, ValueType या इंटरफेस का समर्थन करता है में से एक का होना घोषित किया जाता है मिल गया है, तो आप

if (value is double) 

उपयोग कर सकते हैं लेकिन यह क्या तुम सच में जानना चाहता हूँ कि क्या एक है की तरह लगता है स्ट्रिंग मूल्य parseable एक double के रूप में है। उसके लिए, आपको double.TryParse का उपयोग करना चाहिए - लेकिन आप भी क्या संस्कृति में आपकी रुचि है के बारे में सोचने की जरूरत उदाहरण के लिए, यदि आप "15,5" मान्य double के रूप में देखने जाएगा।? यूरोपीय उपयोगकर्ता शायद, लेकिन अमेरिकी उपयोगकर्ता शायद नहीं करेंगे। क्या आप हजारों विभाजकों को अनुमति देना चाहते हैं?

मैं दृढ़ता से अधिभार जो एक IFormatProvider लेता है का उपयोग करें और उचित संस्कृति उपयोग करने के लिए आपको सलाह देंगे। यहां तक ​​कि यदि आप रुचि रखते हैं संस्कृति डिफ़ॉल्ट है, तो इसके बारे में स्पष्ट होने के लायक है।

आप शायद चाहते हैं:

double result; 
// For suitable values of text, style and culture... 
bool valid = double.TryParse(text, style, culture, out result); 

फिर निर्धारित करने के लिए किया जाए या नहीं यह वास्तव में ठीक प्रकार से पार्स किया गया था valid चर का उपयोग करें। यदि valid सत्य है, तो result का मान पार्स किया गया मान है। यदि valid गलत है, result 0.

1

तुम भी .GetType इस्तेमाल कर सकते हैं() अलग-अलग प्रकार के वापस जाने के लिए यदि आप अनिश्चित क्या हुआ अगर एक विधि संख्या उत्पन्न करने के लिए बुलाया जा रहा है लौटे किया जा रहा है कर रहे हैं हो जाएगा। उदाहरण के लिए http://msdn.microsoft.com/en-us/library/58918ffs(v=vs.71).aspx देखें।

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