检查变量的数据类型是否为double

本文关键字:double 是否 数据类型 变量 检查 | 更新日期: 2023-09-27 18:28:35

我需要检查我拥有的变量是否为数据类型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

使用此:

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

如何真正检查变量是否为双精度?

你需要更清楚地了解你在这里真正想做什么。我不认为你在问你认为自己在问什么,值得注意的是术语上的差异。

如果您有一个声明double类型的变量,那么它肯定是double。如果您有一个变量,它被声明为objectValueType类型或它支持的接口之一,那么您可以使用

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。

使用Double.TryParse方法:

double price;
if (Double.TryParse(txtPrice.Text, out price))
{
    Console.WriteLine(price);
}
else
{
    Console.WriteLine("Not a double!");
}

你不能直接使用:吗

double.Parse(txtPrice.Text);

如果字符串值不是双精度,则会出现FormatException,显示"输入字符串的格式不正确"。

你为什么不试试这样的东西-

  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(),如果它不能创建双精度,它将返回false