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

Jam*_*son 9 c# double casting

我需要检查我所拥有的变量是否属于数据类型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;
}
Run Code Online (Sandbox Code Playgroud)

我认为这会起作用,但显然,我没有意识到txtPrice.Text除了数字之外还有其他任何东西,该Convert课程只会解析出来.

如何才能真实地检查变量是否为双精度?

ion*_*den 30

用这个:

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


Jon*_*eet 10

如何才能真实地检查变量是否为双精度?

你需要什么你更清晰真的想在这里做.我不认为你在问你认为你在问什么,并且值得了解术语的不同之处.

如果你有一个被声明为类型的变量double,那么肯定是一个double.如果你有一个被声明为类型的变量object,ValueType或者它支持的其中一个接口,那么你可以使用

if (value is double)
Run Code Online (Sandbox Code Playgroud)

但听起来你真正想知道的是字符串值是否可解析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);
Run Code Online (Sandbox Code Playgroud)

然后使用该valid变量来确定它是否实际被正确解析.如果valid为true,则值为result解析后的值.如果valid为false,则为result0.


Ahm*_*eed 6

使用Double.TryParse方法

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