C#float.Parse字符串

时间:2014-12-31 13:48:38

标签: c# .net string substring type-conversion

我是C#中的新手,需要从文件中读取float(x, y, z)。 它看起来像:

  

0 -0.01 -0.002

     

0.000833333333333 -0.01 -0.002

如果我尝试

float number = float.Parse("0,54"); // it works well, but
float number = float.Parse("0.54"); // gains exepction.

我从每行读取值的代码(可能会被窃听):

int begin = 0;
int end = 0;
for (int i = 0; i < tempLine.Length; i++)
{
    if (Char.IsWhiteSpace(tempLine.ElementAt(i)))
    {
        end = i;
        float value = float.Parse(tempLine.Substring(begin, end));
        begin = end;
        System.Console.WriteLine(value);
    }
}
有人可以帮忙吗?

2 个答案:

答案 0 :(得分:20)

默认情况下,

float.Parse(string) method会使用您当前的区域设置。您的CurrentCultureNumberDecimalSeparator property似乎,而不是.

这就是您在FormatException示例中获得"0.54"的原因。

作为一种解决方案,您可以使用.作为NumberDecimalSeparator Parse作为CurrentCulture方法中的第二个参数,或者InvariantCulture您的NumberDecimalSeparator并将其.属性设置为float number = float.Parse("0.54", CultureInfo.InvariantCulture);

var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.NumberDecimalSeparator = ".";
float number = float.Parse("0.54", culture);

{{1}}

答案 1 :(得分:5)

您的文化似乎使用comma作为小数点分隔符。尝试使用InvariantCulture

解析它
var value = float.Parse(tempLine.Substring(begin, end), CultureInfo.InvariantCulture);

除此之外,解析这些行的方式比它应该更复杂。您可以拆分该行而不是尝试处理索引:

foreach(var str in tempLine.Split())  
{
    float value = float.Parse(str, CultureInfo.InvariantCulture);
}