She*_*boy 13 .net c# 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.
Run Code Online (Sandbox Code Playgroud)
我从每行读取值的代码(可能会被窃听):
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);
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
Son*_*nül 24
float.Parse(string)方法默认使用您当前的文化设置.看起来像你CurrentCulture的NumberDecimalSeparator财产是,不是.
这就是为什么你FormatException在你的"0.54"例子.
作为一个解决方案,你可以使用一个文化有.一个NumberDecimalSeparator像InvariantCulture在作为第二个参数Parse的方法,也可以.Clone()你CurrentCulture并设置其NumberDecimalSeparator属性.
float number = float.Parse("0.54", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
要么
var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.NumberDecimalSeparator = ".";
float number = float.Parse("0.54", culture);
Run Code Online (Sandbox Code Playgroud)
您的文化似乎comma用作小数点分隔符.尝试解析它InvariantCulture
var value = float.Parse(tempLine.Substring(begin, end), CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
除此之外,解析行的方式比它应该更复杂.您可以拆分该行而不是尝试处理索引:
foreach(var str in tempLine.Split())
{
float value = float.Parse(str, CultureInfo.InvariantCulture);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39189 次 |
| 最近记录: |