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);