2012-03-22 70 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.

相关问题