检查变量是否为数据类型double
我需要检查我所拥有的变量是否为数据类型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
中除了数字txtPrice.Text
还有其他内容, Convert
类只会将其解析出来。
如何才能真实地检查变量是否为双精度?
用这个:
double price; bool isDouble = Double.TryParse(txtPrice.Text, out price); if(isDouble) { // double here }
如何才能真实地检查变量是否为双精度?
你需要更清楚你在这里想要做什么。 我不认为你在问你认为你在问什么,并且值得了解术语的不同之处。
如果你有一个声明为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
为true,则result
值为解析后的值。 如果valid
为false,则result
为0。
使用Double.TryParse
方法 :
double price; if (Double.TryParse(txtPrice.Text, out price)) { Console.WriteLine(price); } else { Console.WriteLine("Not a double!"); }
你为什么不尝试这样的事情 –
double doubleVar; if( typeof(doubleVar) == double ) { printf("doubleVar is of type double!"); }
这可以很容易地检查变量是否为double类型。
如果在调用方法生成数字时不确定返回了什么,也可以使用.GetType()返回变量的类型。 有关示例,请参见http://msdn.microsoft.com/en-us/library/58918ffs(v=vs.71).aspx 。
你可以用
-
double.ParseExact
或 - 使用Regex检查它是否有效。
Double.TryParse是你想要的。
所以,如果我的问题是正确的,那么你的意思是你只想让数字正确吗? 如果这是真的,那么也许这会对你有帮助。
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");
你可以使用double.TryParse()
如果它不能创建一个double,它将返回false
。
你不能只使用:
double.Parse(txtPrice.Text);
?
有了这个,你会得到一个FormatException,说“输入字符串格式不正确”。 如果字符串值不是double,那么看起来大概是你手动做的。