C# 显示每月复利值的方法?

C# 显示每月复利值的方法?,c#,.net,list,visual-studio,data-structures,C#,.net,List,Visual Studio,Data Structures,我是面向对象编程的新手,我需要想出一种方法来显示每个月的值,这些值由特定的利率复合而成。我最初想到的是一个列表,列表中的每个值都与前一个值复合,但我不知道如何实际实现这一点 此时,用户可以使用以下公式指定其初始投资,并在期末获得其最终价值: double initialInvestmentReturn = Math.Pow(1 + ((InterestRate / 100) / 12), 12 * numberOfYears + (numberOfMonths)) * initialInvest

我是面向对象编程的新手,我需要想出一种方法来显示每个月的值,这些值由特定的利率复合而成。我最初想到的是一个列表,列表中的每个值都与前一个值复合,但我不知道如何实际实现这一点

此时,用户可以使用以下公式指定其初始投资,并在期末获得其最终价值:

double initialInvestmentReturn = Math.Pow(1 + ((InterestRate / 100) / 12), 12 * numberOfYears + (numberOfMonths)) * initialInvestment;
然后,用户应该能够指定每月的固定投资,每月复利,并在最后计算。为了计算一个月的月回报率,我使用了以下公式:

double monthlyInterestReturn = Math.Pow(1 + ((InterestRate / 100) / 12), 1) * monthlyInvestment;
这就是我目前尝试使用的方法:

ArrayList monthlyValues = new ArrayList();
            int counter = 0;

            while (0 == 0)
            {
                monthlyValues.Add(monthlyInterestReturn);

                if (monthlyValues.Count == numberOfMonths + (numberOfYears * 12))
                {
                    break;
                }

            }

            foreach (double d in monthlyValues)
            {
                counter++;
                double var = monthlyInvestment * counter;
                double result = Math.Pow(1 + ((InterestRate / 100) / 12), counter) * var;

                rtfTestBox.Text += result.ToString("#.##") + Environment.NewLine;

            }
由于我学到的唯一适用的数据结构是Array/ArrayList(我听说它已经被SO用户淘汰了),我试图找到一种方法,将AL中的下一个值设置为前一个索引值的复合值,但没有效果。我得到的输出值低于这个值,正如你所看到的,这个值不太正确

//100 invested per month for 3 years 0 months at 12% annual interest:
    101
    204.02
    309.09
    416.24
    525.51
    636.91
    750.49
    866.29
    984.32
    1104.62
    1227.24
    1352.19
    1479.52
    1609.26
    1741.45
    1876.13
    2013.32
    2153.07
    2295.41
    2440.38
    2588.02
    2738.37
    2891.47
    3047.36
    3206.08
    3367.67
    3532.16
    3699.61
    3870.06
    4043.55
    4220.11
    4399.81
    4582.68
    4768.76
    4958.11
    5150.77
该项目是visual studio中的.NET C#应用程序

任何帮助都将不胜感激,如有必要,我将非常乐意提供更多细节


提前谢谢

正如您所提到的,ArrayList已经过时。c#中的goto数据结构是。当我们谈论货币时,推荐的类型是,这避免了其他浮点类型的一些舍入问题

在这种情况下,我们可以使用一种更方便的方法:

    public static IEnumerable<decimal> CompoundIntrest(decimal initialAmount, decimal yearlyIntrestRatePercent, decimal monthlyInvestmentRate)
    {
        var montlyIntrest = 1 + yearlyIntrestRatePercent / (1200);
        var currentAmount = initialAmount;
        while (true)
        {
            yield return currentAmount;
            currentAmount = currentAmount * montlyIntrest + monthlyInvestmentRate;                
        }
    }

请注意,
Take(36)
,这决定了从中获取值的月份数,从而避免了无限循环。还可以使用此方法将其转换为实际列表。

非常感谢!为了补充您所说的内容,尽管ToList方法也可以打印列表,但由于我正在创建一个.net应用程序,所以我使用了以下代码:rtfTestBox.Text+=“£”+“\t”+(v.ToString(“N1”)+Environment.NewLine;它会自动打印每个月的值。
        var amounts = CompoundIntrest(100, 12, 100).Take(36);
        foreach(var a in amounts)
        {
            Console.WriteLine(a.ToString("N1"));
        }