每日复利循环

本文关键字:循环 每日 | 更新日期: 2023-09-27 18:12:21

我正在做一个项目,我必须计算交易的年至今每日复利。目前我只得到没有利息的当前余额。我相信我的问题是与foreach循环,但我不确定我犯了一个错误。它是通过天,但要么没有兴趣申请或runningTotal没有正确结转。

                public IEnumerable<DateTime> EachDay(DateTime from, DateTime thru)
    {
        for (var day = from.Date; day.Date <= thru.Date; day = day.AddDays(1))
            yield return day;
    }
    public decimal PrincipalplusInterest()
    {
        DateTime startDate = new DateTime( DateTime.Now.Year, 1, 1);
        DateTime endDate = startDate.AddYears(1);
        int compoundingTimes = 12;
        TimeSpan duration = endDate - startDate;
        var numberOfDaysInYear = duration.Days;
        decimal runningTotal = 0;
        double interestRate = InterestRate;
        foreach (DateTime day in EachDay(startDate, endDate))
        {
            decimal sumOfAnyTransactionToday = Transactions.Where(x => x.TransactionDate == day).Sum(x => x.Amount);
            runningTotal = runningTotal + sumOfAnyTransactionToday;
            double timePeriod = 1 / numberOfDaysInYear;
            double rate = interestRate / compoundingTimes;
            double total = System.Convert.ToDouble(runningTotal);
            double principalAndInterest = total * Math.Pow((1 + rate), (compoundingTimes * timePeriod));
            runningTotal = System.Convert.ToDecimal(principalAndInterest);
        }
        return runningTotal;
    }

    [DisplayName("Year to Date Interest")]
    public decimal YrToDateInterest()
    {
        decimal interest = PrincipalplusInterest() - CurrentBalanceCalculation();
        return interest;
    }

每日复利循环

你在做整数运算:

double timePeriod = 1 / numberOfDaysInYear;

numberOfDaysInYear是一个整型,所以1除以这个值将总是返回0。

通过使其中一个值为浮点值来使计算为浮点值:

double timePeriod = 1.0 / numberOfDaysInYear;

可能是最简单的解决方案。

如果你的事务包含一个时间组件,那么这个语句将总是返回0,除非你碰巧有一个恰好发生在午夜的事务。

Transactions.Where(x => x.TransactionDate == day).Sum(x => x.Amount);

要获取日期,您需要获取DateTime对象的Date组件:

Transactions.Where(x => x.TransactionDate.Date == day).Sum(x => x.Amount);