在C#中具有平均值并格式化2个小数位

时间:2014-11-08 16:30:37

标签: c#

编写一个C#程序以从文本文件中检索值并打印值的平均值,格式化为两位小数。

所以我已经编码并创建了一个名为" averages.txt"的文本文件。文件中有4个数字,我的程序已经在我的文本文件中检索数据并输出值。

我遇到问题的地方是我需要找到文件中4个数字的平均值,然后将数字格式化为2个小数位。

我的代码:

    static void Main(string[] args)
    {
        string innerNum;
        string outerNum = "";

        if (File.Exists("averages.txt"))
        {
            try
            {
                StreamReader inFile = new StreamReader("averages.txt");
                while ((innerNum = inFile.ReadLine()) != null)
                {
                    outerNum += innerNum + "\n";
                }
                Console.WriteLine(outerNum);


            }
            catch (System.IO.IOException e)
            {
                Console.WriteLine("IO Exception: " + e.Message);
            }
        }
            else
            {
                Console.WriteLine("The File Does Not Exist.");
            }

        Console.Write("Press Enter to Exit.");
        Console.ReadKey();
    }
}

}

2 个答案:

答案 0 :(得分:0)

你必须将一个字符串解析为double。请记住,只有当每一行都有数字时,以下解决方案才有效。您应该添加验证,异常处理等。

您可以通过String.Format(“{0:N2}”,...)输出带小数点后2位的数字。 http://msdn.microsoft.com/en-us/library/system.string.format(v=vs.110).aspx

static void Main(string[] args) {
    string innerNum;
    string outerNum = "";
    double sum = 0;
    int count = 0;
    if (File.Exists("averages.txt")) {
        try {
            StreamReader inFile = new StreamReader("averages.txt");
            while ((innerNum = inFile.ReadLine()) != null) {
                try {
                    outerNum += innerNum + "\n";
                    sum += double.Parse(innerNum);
                    count++;
                } catch(Exception e) {}
            }
            Console.WriteLine(outerNum);
        } catch (System.IO.IOException e) {
            Console.WriteLine("IO Exception: " + e.Message);
        }
    }  else {
        Console.WriteLine("The File Does Not Exist.");
    }
    Console.WriteLine("Average is : " + String.Format("{0:N2}",sum/(double)count));

    Console.Write("Press Enter to Exit.");
    Console.ReadKey();
}

答案 1 :(得分:0)

我回答这个问题,假设这是一个家庭作业,你的教授不会接受这个Linq解决方案作为答案。

var avg = File.ReadAllText("averages.txt")
              .Split(" \t\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
              .Average(x => double.Parse(x, CultureInfo.InvariantCulture));

Console.WriteLine("AVG: {0:0.00}", avg);