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?

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top