Неправильные десятичные знаки после разбора - PullRequest
3 голосов
/ 20 декабря 2011

Я пытаюсь загрузить некоторые XY-координаты из asc-файла. Это выглядит так:

-55,988544 9382
-53,395804 9403
-50.804601 9433

Тогда я конвертирую координаты в поплавки. Но так или иначе, например для первого значения я получаю "- 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 ++

Ответы [ 3 ]

6 голосов
/ 20 декабря 2011

Похоже, ваше приложение работает в среде, где "." является разделителем тысяч, а не десятичным разделителем. Если в исходном файле всегда используется «.», То лучше проанализировать:

float.Parse(word, System.Globalization.CultureInfo.InvariantCulture);

Это гарантирует, что при разборе будет использоваться "." не имеет значения, что такое машинная культура.

3 голосов
/ 20 декабря 2011

Вероятно, это проблема с настройками культуры. Попробуйте следующее:

var culture = System.Globalization.CultureInfo.InvariantCulture;
value = float.Parse(word, culture);
2 голосов
/ 20 декабря 2011

Если ваши данные используют известную фиксированную запись для десятичного разделителя и т. Д., Вы не должны полагаться на значения по умолчанию на считывающем ПК.Используйте

   value = float.Parse(word, CultureInfo.InvariantCulture);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...