float.Parse () no funciona como quería

Tengo un archivo de texto, que utilizo para ingresar información en mi aplicación. El problema es que algunos valores son flotantes y algunas veces son nulos, por lo que recibo una excepción.

var s = "0.0"; var f = float.Parse(s); 

El código anterior lanza una excepción en la línea 2 “La cadena de entrada no tenía el formato correcto”.

Creo que la solución serían las sobrecargas avanzadas de float.Parse, que incluyen IFormatProvider como parámetro, pero todavía no sé nada al respecto.

¿Cómo puedo analizar “0.0”?

Símbolo de punto “.” no se utiliza como separador (esto depende de la configuración de Cultura). Entonces, si quieres estar absolutamente seguro de que el punto se analiza correctamente, necesitas escribir algo como esto:

 CultureInfo ci = (CultureInfo)CultureInfo.CurrentCulture.Clone(); ci.NumberFormat.CurrencyDecimalSeparator = "."; avarage = double.Parse("0.0",NumberStyles.Any,ci); 

Puedes verificar primero la cadena nula o vacía.

También puedes usar una de las sobrecargas de Parse (o incluso usar TryParse ) para dar un control más específico.

Por ejemplo, para verificar el uso de la cultura invariable, para evitar variaciones del separador decimal con datos visibles que no son de usuario (por ejemplo, de comunicaciones A2A):

 float SafeParse(string input) { if (String.IsNullOrEmpty(input)) { throw new ArgumentNullException("input"); } float res; if (Single.TryParse(input, NumberStyles.Float, CultureInfo.InvariantCulture, out res)) { return res; } return 0.0f; // Or perhaps throw your own exception type } 

Los siguientes trabajos para mí:

 string stringVal = "0.0"; float floatVal = float.Parse(stringVal , CultureInfo.InvariantCulture.NumberFormat); 

El caso inverso (funciona para todos los países):

 float floatVal = 0.0f; string stringVal = floatVal.ToString("F1", new CultureInfo("en-US").NumberFormat); 

Acabo de intentar esto y no arrojó ninguna excepción.

¿Está su formato de número usando coma decimal en lugar de punto decimal? Has probado:

 var s = "0,0"; var f = float.Parse(s); 

Habiendo preguntado esto, lo he intentado con la coma esperando obtener una excepción, pero no lo hice. Así que esta podría no ser la respuesta.

O, simplemente puede verificar si el texto de entrada no es nulo o está vacío.

Además, ten cuidado, porque en algunos países, el “.” (punto) que separa los números flotantes es “,” (coma)