2012-03-22 19 views
5

Necesito comprobar si una variable que tengo es del tipo de datos double. Esto es lo que he intentado:Comprobando si una variable es del tipo de datos 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; 
} 

pensé que esto iba a funcionar, pero, obviamente, que no se dio cuenta si txtPrice.Text tenían más que un número en ella ninguna cosa, la clase Convert se acaba de analizar a cabo.

¿Cómo puedo verificar de manera realista si una variable es doble?

+0

"variable" es la palabra incorrecta. Está intentando determinar si el texto se puede convertir a un valor de coma flotante. Si estuviera determinando el tipo de una variable, usaría variable.GetType() == typeof (double) – Brannon

Respuesta

23

Utilice esta:

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

Eso es mejor, pero todavía lo deja pasar si ingreso "qwerty" como precio. Sin embargo, lo capto si lo dejo en blanco. –

+0

usa el resultado bool devuelto por tryparse – ionden

3

Uso del Double.TryParse method:

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

Usted puede utilizar

  • double.ParseExact o
  • utilización expresión regular para comprobar si es válida.
0

Así que si entiendo correctamente su pregunta, quiere decir que solo quiere permitir números ¿verdad? Si eso es cierto, entonces tal vez esto te ayude.

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

Puede utilizar double.TryParse() regresará false si no se pudiera crear un doble.

0

No se pudo usted sólo tiene que utilizar:

double.Parse(txtPrice.Text); 

?

Con esto tendrá una FormatException que dice "La cadena de entrada no estaba en el formato correcto". si el valor de la cadena no es un doble, que parece ser más o menos lo que estaba haciendo manualmente de todos modos.

1

¿Por qué usted no intentar algo como esto -

double doubleVar; 
    if(typeof(doubleVar) == double) { 
     printf("doubleVar is of type double!"); 
    } 

Esto puede comprobar fácilmente si la variable es de tipo doble.

7

¿Cómo puedo verificar de manera realista si una variable es doble?

Necesita ser más clara acerca de lo que está realmente tratando de hacer aquí. No creo que estés preguntando qué crees que estás preguntando, y vale la pena ser consciente de las diferencias en la terminología.

Si usted tiene una variable que se declara a ser de tipo double, entonces es definitivamente un double.Si usted tiene una variable que se declara de tipo object, ValueType o una de las interfaces que soporta, a continuación, puede utilizar

if (value is double) 

Pero parece que lo que realmente quiere saber es si un el valor de cadena es parseable como double. Para eso, debe usar double.TryParse - pero usted también necesita pensar en qué cultura le interesa. Por ejemplo, ¿podría ver "15,5" como un double válido? Los usuarios europeos podrían, pero los usuarios de EE. UU. Probablemente no lo harían. ¿Quieres permitir miles de separadores?

Le recomiendo encarecidamente que utilice la sobrecarga que toma un IFormatProvider y utilice la referencia cultural adecuada. Incluso si la cultura que le interesa es el valor predeterminado, vale la pena ser explícito al respecto.

es probable que desee:

double result; 
// For suitable values of text, style and culture... 
bool valid = double.TryParse(text, style, culture, out result); 

A continuación, utilice la variable valid para determinar si es o no realmente se analiza correctamente. Si valid es verdadero, entonces el valor de análisis es result. Si valid es falso, result será 0.

Cuestiones relacionadas