如何将带有指数的字符串转换为float?

时间:2010-02-10 15:39:56

标签: .net string floating-point exponent

我有以下字符串:“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 个答案:

答案 0 :(得分:3)

我认为,这个帖子给出了你的问题的提示:http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/e482cda0-6510-4d2c-b830-11e57e04f65d(而System.Globalization.NumberStyles.Float是这里的关键事项之一 - 它改变了.的解释方式)

答案 1 :(得分:3)

您遇到了本地化问题,其中.被解释为千位分隔符而不是小数点分隔符。你在欧洲吗?

试试这个:

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

这支持了我相信您遇到本地化问题。