如何使用StreamReader读取双精度值?

时间:2019-04-03 03:09:27

标签: c#

我正在尝试从txt文件读取到数组。我把所有内容都写成一个整数,但是我误读了信息,还需要考虑小数。如何更改下面的代码以允许小数?

我是C#的新手,但我无法弄清楚这一点。如果仅将int切换为double,则会收到错误“无法将int类型隐式转换为double”。

            StreamReader ifile;
            ifile = File.OpenText("sales.txt");
            int count = 0;
            string str = "";
            //Populating the array
            while (ifile.EndOfStream == false)
            {
                str = ifile.ReadLine();
                list[count] = decimal.Parse(str);
                count++;
            }
            // Display the contents of the array
            foreach (decimal val in list)
            {
                listBoxSales.Items.Add(val);
            }

            int Average;
            Average = average(list);
            labelAvgsales.Text = Average.ToString();

我只需要将数字拉到数组列表中即可。上面的代码可以提取整数,但是当列表中有整数表示“输入字符串的格式不正确”时,显然会失败。

更新:使用上面的代码,小数不再出错。我希望自己弄清楚的第二部分是从数组中调用信息。

以下内容以前可以使用,但是切换到允许小数之后,它会出错。我在下面尝试将int切换为十进制,但是我不确定自己做错了什么。

private int average(int[] numList)
        {
            int avg;
            int total = 0;
            for (int i = 0; i < numList.Length; i++)
            {
                total += numList[i];
            }
            avg = total / numList.Length;
            return avg;
        }

2 个答案:

答案 0 :(得分:1)

使用decimal.Parse

    var x = "1";
    var y = "1.1";
    Console.WriteLine(decimal.Parse(x));
    Console.WriteLine(decimal.Parse(y));

这是一个显示如何执行此操作的dotnetfiddle:https://dotnetfiddle.net/mUB8iz

答案 1 :(得分:0)

C#是类型安全的编程语言,

您可以使用ArrayList类不是类型安全的,因为它可以存储任何对象,这意味着您可以执行以下操作:

 var integers = new  ArrayList();
 while (ifile.EndOfStream == false)
 {
 str = ifile.ReadLine();
 integers.Add(decimal.Parse(str));
 }

并按照以下步骤进行操作。