簡體   English   中英

每日復利循環

[英]Daily compound interest Loop

我正在做一個項目,必須計算年初至今的每日交易復利,目前我只得到沒有利息的當前余額。 我相信我的問題與foreach循環有關,但我不確定在哪里出錯。 這是過去的日子,但是沒有利息申請或runTotal無法正常結轉。

                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;

這可能是最簡單的解決方案。

同樣,如果您的交易包含時間成分,那么該語句將始終返回零,除非您碰巧恰好在午夜進行了交易。

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

要僅獲取日期,您需要獲取DateTime對象的Date組件:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM