Cómo convertir cadena con exponente a flotar?
-
19-09-2019 - |
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?
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 .
)