C# 检查变量是否为双精度数据类型
我需要检查我的变量是否为数据类型C# 检查变量是否为双精度数据类型,c#,casting,double,C#,Casting,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); r
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
类就会将其解析出来
如何才能真正检查变量是否为双精度?使用以下方法:
double price;
bool isDouble = Double.TryParse(txtPrice.Text, out price);
if(isDouble) {
// double here
}
使用:
你可以用
或double.ParseExact
- 使用Regex检查它是否有效
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.Parse(txtPrice.Text);
?
如果字符串值不是一个双精度值,这看起来与您手动执行的操作大致相同。为什么不尝试类似的操作-
double doubleVar;
if( typeof(doubleVar) == double ) {
printf("doubleVar is of type double!");
}
这可以很容易地检查变量是否为double类型
如何才能真正检查变量是否为双精度
你需要更清楚地知道你到底想在这里做什么。我不认为你问的是你认为你在问的,值得注意的是术语上的差异
如果有一个变量被声明为类型为double
,那么它肯定是double
。如果有一个变量被声明为类型为object
、ValueType
或它支持的某个接口,则可以使用
if (value is double)
但听起来您真正想知道的是字符串值是否可以解析为double
。为此,你应该使用——但你也需要考虑你感兴趣的文化。例如,您是否将“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。如果不确定调用方法生成数字时返回的是什么,也可以使用.GetType()返回变量类型。有关示例,请参见 “变量”是个错误的词。您正在尝试确定文本是否可以转换为浮点值。如果要确定变量的类型,最好使用variable.GetType()==typeof(double),但如果我输入“qwerty”作为价格,它仍然可以通过。但是,如果我将其留空,它会捕获它。请使用tryparse返回的bool结果
double result;
// For suitable values of text, style and culture...
bool valid = double.TryParse(text, style, culture, out result);