Pregunta

Tengo la siguiente cadena: "3.39112632978e + 001", que necesito para convertir a flotar. WolframAlpha dice que el resultado de este valor es 33.9112632978 que, evidentemente, que debería obtener de alguna manera y no podía encontrar la manera.

Single.Parse("3.39112632978e+001") gives 3.39112624E+12

Double.Parse("3.39112632978e+001") gives 3391126329780.0

float.Parse("3.39112632978e+001") gives 3.39112624E+12

¿Qué debo hacer?

¿Fue útil?

Solución

Usted está experimentando un problema de localización en la que el . se interpreta como un separador de miles en lugar de como un separador decimal. ¿Estás en, digamos, Europa?

Prueba esto:

float f = Single.Parse("3.39112632978e+001", CultureInfo.InvariantCulture);
Console.WriteLine(f);

Salida:

33.91126

Tenga en cuenta que si sustituimos el . por un , entonces vemos el comportamiento que está experimentando:

float g = Single.Parse("3,39112632978e+001", CultureInfo.InvariantCulture);
Console.WriteLine(g);

Salida:

3.391126E+12

Esto apoya mi creencia de que usted está experimentando un problema de localización.

Otros consejos

Creo, este hilo da consejos a su pregunta: http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/e482cda0-6510-4d2c-b830-11e57e04f65d (y el System.Globalization.NumberStyles.Float es una de las cosas claves aquí - las que cambia cómo se interpreta la .)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top