我是 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);
}
}
有人可以帮忙吗?
float.Parse(string)
方法默认使用您当前的区域性设置。看起来您的 CurrentCulture
的 NumberDecimalSeparator
属性 是 ,
而不是 .
这就是为什么您在
FormatException
示例中得到 "0.54"
。
作为解决方案,您可以使用具有
.
作为 NumberDecimalSeparator
的文化,例如 InvariantCulture
作为 Parse
方法中的第二个参数,或者您可以 .Clone()
并设置它的CurrentCulture
属性为 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);
:
解析它
InvariantCulture
除此之外,解析线条的方式比应有的更复杂。您可以只分割线,而不是尝试处理索引:
var value = float.Parse(tempLine.Substring(begin, end), CultureInfo.InvariantCulture);