Como converter string com expoente para flutuar?
-
19-09-2019 - |
Pergunta
Eu tenho a seguinte seqüência de caracteres: "3.39112632978e + 001", que eu preciso para converter a flutuar. WolframAlpha diz que o resultado deste valor é 33,9112632978 que, evidentemente, eu deveria ter alguma forma e eu não conseguia descobrir como.
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
O que devo fazer?
Solução
Você está passando por um problema de localização em que o .
está sendo interpretado como um separador de milhares em vez de como um separador decimal. Você está em, digamos, Europa?
Tente isto:
float f = Single.Parse("3.39112632978e+001", CultureInfo.InvariantCulture);
Console.WriteLine(f);
Output:
33.91126
Note que, se substituir a .
por um ,
então vemos o comportamento que você está enfrentando:
float g = Single.Parse("3,39112632978e+001", CultureInfo.InvariantCulture);
Console.WriteLine(g);
Output:
3.391126E+12
Este suporta a minha crença de que você está enfrentando um problema de localização.
Outras dicas
Eu acho que, esta discussão dá dicas para a sua pergunta: http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/e482cda0-6510-4d2c-b830-11e57e04f65d (eo System.Globalization.NumberStyles.Float
é um dos as coisas importantes aqui - ele muda a forma como o .
é interpretado)