Вы столкнулись с проблемой локализации, при которой .
интерпретируется как разделитель тысяч вместо десятичного разделителя. Вы, скажем, в Европе?
Попробуйте это:
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
Это подтверждает мое убеждение, что у вас возникла проблема с локализацией.