2011-09-23 60 views
5
private void ReadUnitPrice() 
    { 
     Console.Write("Enter the unit gross price: "); 
     unitPrice = double.Parse(Console.ReadLine()); 
    } 

Esto debería funcionar, pero me falta algo obvio. Cada vez que ingreso un doble me da el error: System.FormatException: La cadena de entrada no estaba en el formato correcto. Tenga en cuenta que 'unitPrice' se declara como un doble.System.FormatException: La cadena de entrada no estaba en un formato correcto

+0

¿Qué valores está ingresando? –

+0

valores dentro de 0-10 como 4.5 o 5.5 –

Respuesta

6

Es posible que esté utilizando un símbolo de separación de coma incorrecto o incluso haya cometido otro error al especificar el doble valor. De todos modos en tales casos debe utilizar el método Double.TryParse(), que es seguro en términos de excepción y permite especificar el proveedor de formato, básicamente cultura para ser utilizado.

public static bool TryParse(
    string s, 
    NumberStyles style, 
    IFormatProvider provider, 
    out double result 
) 

The TryParse method is like the Parse(String, NumberStyles, IFormatProvider) method, except this method does not throw an exception if the conversion fails. If the conversion succeeds, the return value is true and the result parameter is set to the outcome of the conversion. If the conversion fails, the return value is false and the result parameter is set to zero.

EDIT: respuesta al comentario

if(!double.TryParse(Console.ReadLine(), out unitPrice)) 
{ 
    // parse error 
}else 
{ 
    // all is ok, unitPrice contains valid double value 
} 

También puede probar:

double.TryParse(Console.ReadLine(), 
       NumberStyle.Float, 
       CultureInfo.CurrentCulture, 
       out unitPrice)) 
+0

sí, lo intenté en realidad ... y adivina qué, funciona. Odio el símbolo de separación de coma sueco ahora ... –

+0

TryParse toma más parámetros en su argumento y como soy un novato en C# y no estoy muy familiarizado con el lugar donde TryParse envía el resultado (ya que devuelve un bool) me quedaré con Parse por ahora. "Recibir 2 valores de retorno" parece un poco más de mi cabeza, pero voy a tener en cuenta TryParse para su uso futuro. Gracias. –

+0

@ Ryuji89: vea la respuesta actualizada, parte EDITAR – sll

Cuestiones relacionadas