我正在尝试从asc文件加载一些XY坐标。它看起来像这样:
-55.988544 9382
-53.395804 9403
-50.804601 9433
然后我将坐标转换为浮点数。但不知何故f.e.对于第一个值,我得到“ - 55988544.0”而不是“ - 55.988544”。
以下是代码:
private void btngettext_Click(object sender, EventArgs e)
{
StreamReader objStream = new StreamReader("C:\\...\\.asc");
firstLine = objStream.ReadLine();
int i = 0;
/*Split String on Tab,
* will separate words*/
string[] words = firstLine.Split('\t');
richTextBox1.Text = words[0];
foreach(string word in words)
{
if(word != "")
{
Console.WriteLine(word); //the value of the string is "-55.988544" here
//value = float.Parse(word); tried both
value = Convert.ToSingle(word); //here the float value is "-55988544.0"
Console.WriteLine(value.ToString());// "-5,598854E+07"
xyArray[0,i] = value;
i++;
}
}
}
此外,如果我使用objStream.ReadToEnd()或.Read(),如何迭代行。读取第一行中的值,保存它们并继续下一行。
提前致谢,
BC ++
答案 0 :(得分:6)
听起来您的应用程序正在“。”文化下运行。是千位分隔符而不是小数分隔符。如果源文件始终使用“。”,则最好使用以下语句进行解析:
float.Parse(word, System.Globalization.CultureInfo.InvariantCulture);
这将确保解析使用“。”无论机器文化是什么。
答案 1 :(得分:3)
这可能是文化设置的问题。请尝试以下方法:
var culture = System.Globalization.CultureInfo.InvariantCulture;
value = float.Parse(word, culture);
答案 2 :(得分:2)
如果您的数据使用已知的固定表示法来表示小数点分隔符等,则不应该依赖于读取PC的默认值。使用
value = float.Parse(word, CultureInfo.InvariantCulture);