2012-03-22 89 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類只會解析出來。

我該如何可靠地檢查一個變量是否是雙精度?

+0

「變量」是錯誤的詞。您正試圖確定文本是否可以轉換爲浮點值。如果你正在確定變量的類型,你可以使用variable.GetType()== typeof(double) – Brannon 2012-03-22 14:07:54

回答

23

使用此:

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

這樣比較好,但是如果我輸入「qwerty」作爲價格,它仍然會通過。但是,如果我將它留空,它會發現它。 – 2012-03-22 14:08:58

+0

使用tryparse返回的布爾結果 – ionden 2012-03-22 14:11:20

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
  • 使用正則表達式來檢查它是否有效。
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); 

有了這個,你將會得到一個FormatException,表示「輸入字符串的格式不正確」。如果字符串值不是雙精度值,這看起來大致是你手動進行的操作。

1

你爲什麼不嘗試這樣的事情 -

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

這可以很容易地檢查變量是一種雙重的。

7

我該如何可靠地檢查一個變量是否是雙精度?

你需要更清楚你在做什麼真的試圖在這裏做。我不認爲你在問你在問什麼,並且值得注意術語上的差異。

如果你有一個變量宣稱爲double,那麼它肯定是double。如果你有這被聲明爲object型,ValueType或支持的接口之一的變量,那麼你可以使用

if (value is double) 

但它聽起來像你真的想知道什麼是是否字符串值爲可解析作爲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爲false,則result將爲0.

相關問題