Как преобразовать строку с показателем степени в число с плавающей точкой? - PullRequest
1 голос
/ 10 февраля 2010

У меня есть следующая строка: «3.39112632978e + 001», которую мне нужно конвертировать в float.WolframAlpha говорит, что результатом этого значения является 33,9112632978, которое, очевидно, мне нужно как-то получить, и я не мог понять, как.

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

Что мне делать?

Ответы [ 2 ]

3 голосов
/ 10 февраля 2010

Вы столкнулись с проблемой локализации, при которой . интерпретируется как разделитель тысяч вместо десятичного разделителя. Вы, скажем, в Европе?

Попробуйте это:

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

Выход:

33.91126

Обратите внимание, что если мы заменим . на ,, то увидим поведение, которое вы испытываете:

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

Выход:

3.391126E+12

Это подтверждает мое убеждение, что у вас возникла проблема с локализацией.

3 голосов
/ 10 февраля 2010

Я думаю, эта ветка дает подсказки на ваш вопрос: http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/e482cda0-6510-4d2c-b830-11e57e04f65dSystem.Globalization.NumberStyles.Float - одна из ключевых вещей здесь - она ​​меняет то, как . интерпретируется)

...