【问题标题】:calculating averages from text file c#从文本文件c#计算平均值
【发布时间】:2017-04-10 04:11:33
【问题描述】:

我需要有关如何使程序在最后显示所有价格组合的平均值的帮助

   static void Main(string[] args)
{
    int[] hours = new int[31];
    const decimal HOURLY_RATE = 2.5M;
    const decimal MAX_FEE = 20.00M;
    decimal pay;
    int counter = 0;
    string line;
    StreamReader fileSR = new StreamReader("hours.txt");
    line = fileSR.ReadLine();
    while (line != null)
    {
        hours[counter] = int.Parse(line);
        counter = counter + 1;
        line = fileSR.ReadLine();
    }
    fileSR.Close();
    Console.WriteLine("hours     pay");
    for (int i = 0; i < hours.Length; i++)
    {
        pay = Math.Min(hours[i] * HOURLY_RATE, MAX_FEE);
        Console.WriteLine("{0,4} {1,10}", hours[i], pay.ToString("C"));
    }
    Console.ReadKey();




}

} }

我有点卡在如何让它显示所有结果然后在应用程序底部添加平均值

【问题讨论】:

  • 请详细说明您的代码要做什么
  • 所以基本上代码会显示文本文件中的小时数以及价格,然后我希望它计算所有价格的平均值
  • 试试这个decimal result = Math.Min(File.ReadLines("hours.txt").Select(x =&gt; decimal.Parse(x)).Average() * HOURLY_RATE, MAX_FEE);

标签: c# average


【解决方案1】:

我更喜欢您使用类似以下的类来处理文件中的所有数据:

public class wages
{
    const decimal HOURLY_RATE = 2.5M;
    const decimal MAX_FEE = 20.00M;
    private int _WorkingHour;

    public int WorkingHour
    {
        get { return _WorkingHour; }
        set
        {
            _WorkingHour = value;
            _AmountToPay = Math.Min(value * HOURLY_RATE, MAX_FEE);
        }
    }
    private decimal _AmountToPay;

    public decimal AmountToPay
    {
        get { return _AmountToPay; }
    }

    public override string ToString()
    {
        return String.Format("{0,4} {1,10}", WorkingHour, AmountToPay.ToString("C"));
    }
}

然后创建一个类列表来存储文件中的详细信息,显示它们并计算总和和平均值,如下所示:

var LinesInFile = System.IO.File.ReadAllLines("hours.txt");
List<wages> wagesList = new List<wages>();
foreach (string line in LinesInFile)
{
    wagesList.Add(new wages() { WorkingHour = int.Parse(line) });
}

// Display the details
Console.WriteLine("hours     pay");
foreach (wages wage in wagesList)
{
    Console.WriteLine(wage.ToString());// overrided method will give you the formated string
}
Console.WriteLine("Average Pay : {0}", wagesList.Average(x => x.AmountToPay));

如果您仍然想使用您的代码,那么您必须声明一个变量来保持工资总和,然后根据该值获得平均值,我认为您必须遵循以下代码:

Console.WriteLine("hours     pay");
decimal sumOfPay = 0;
for (int i = 0; i < hours.Length; i++)
{
    pay = Math.Min(hours[i] * HOURLY_RATE, MAX_FEE);
    sumOfPay += pay;
    Console.WriteLine("{0,4} {1,10}", hours[i], pay.ToString("C"));
}
Console.WriteLine("Average Pay : {0}", sumOfPay / hours.Length );

【讨论】:

  • 没问题,很乐意帮助你,如果有帮助请告诉我
  • 所以目前我只是想坚持使用数组,类似于我在原始代码中的内容,因为我仍在尝试学习它们,有没有办法找到平均值使用我使用的原始代码?
  • 下一个效果很好,谢谢你以后会考虑使用类
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多