C# 每个月EMI都会重复完整的日期列表

C# 每个月EMI都会重复完整的日期列表,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,我正在试着做一个摊销时间表。我正在获取数据,但日期没有正确显示。对于每个月的利息、本金和余额,重复所有日期(整个月列表)。这就是我得到的 Date Interest Principal Balance 6/04/2021 29 820 9180 6/05/2021 29 820 9180 6/06/2021 29 820 9180 .... 6/04/2021 27 82

我正在试着做一个摊销时间表。我正在获取数据,但日期没有正确显示。对于每个月的利息、本金和余额,重复所有日期(整个月列表)。这就是我得到的

Date    Interest    Principal   Balance
6/04/2021 29        820          9180
6/05/2021 29        820          9180
6/06/2021 29        820          9180
....
6/04/2021 27        822          8358
6/05/2021 27        822          8358
6/06/2021 27        822          8358
对于下一个EMI,整个月份的列表都会重复 结果应该是这样的

Date    Interest    Principal   Balance
6/04/2021 29        820          9180
6/05/2021 27        822          8358
。。。 谢谢你的帮助。 这是模型课

public class AmortizationSchedule
{
         [DisplayName("Start Date")]
        public DateTime StartDate{get;set;}
        public List<DateTime> Date { get; set; }
        public decimal Interest { get; set; }
        public decimal Balance { get; set; }
        public decimal Principal { get; set; }
}

公共类分期付款计划
{
[显示名称(“开始日期”)]
公共日期时间起始日期{get;set;}
公共列表日期{get;set;}
公共小数利益{get;set;}
公共十进制余额{get;set;}
公共十进制主体{get;set;}
}
这就是观点

@model IEnumerable<AmortizationCalculator.Web.Models.AmortizationSchedule>

<table>
    <thead>
        <tr>
            <th>Date</th>
            <th>Interest</th>
            <th>Principal</th>
            <th>Balance</th>

        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {

            @foreach (var q in item.Date)
            {
                <tr>
                    <td>
                        <li>@q.ToShortDateString()</li>

                    </td>
                    <td>
                        @item.Interest
                    </td>
                    <td>
                        @item.Principal
                    </td>
                    <td>
                        @item.Balance
                    </td>
                </tr>
                }
            }
        </tbody>

</table>
@model IEnumerable
日期
兴趣
校长
平衡
@foreach(模型中的var项目)
{
@foreach(项目日期中的var q)
{
  • @q、 ToSortDateString()
  • @项目.利息 @项目.负责人 @项目.结余 } }
    这些是我获取EMI的方法,以及从开始日期到结束日期之间的月份列表

        public class AmortizedLib
        {
    
            public List<AmortizationSchedule> AmortizationScheduleCalculation(decimal totalAmount
            , decimal rate, decimal downPayment
                ,int loanTerm, DateTime startDate)
            {
                decimal EMI;
                decimal principal = totalAmount - downPayment;
                decimal monthlyInterest;
                decimal monthlyPrincipal;
                decimal newPrincipalBalance;
                int numberOfEMI = loanTerm * 12;
                int year = loanTerm * 12;
    
                DateTime Date = DateTime.Now;
                DateTime endDate = Date.AddMonths(year);
    
                Console.WriteLine(endDate);
    
                EMI = Math.Round(monthlyPayments(principal, rate, loanTerm));
    
                List<AmortizationSchedule> schedules = new List<AmortizationSchedule>();
                for (int i = 0; i <= numberOfEMI; i++)
                {
                    monthlyInterest = Math.Round((principal * rate / 100) / 12);
                    monthlyPrincipal = Math.Round(EMI - monthlyInterest);
                    newPrincipalBalance = Math.Round(principal - monthlyPrincipal);
                    principal = newPrincipalBalance;
    
                    AmortizationSchedule amortizationSchedule = new AmortizationSchedule();
    
                        amortizationSchedule.Interest = monthlyInterest;
                        amortizationSchedule.Principal = monthlyPrincipal;
                        amortizationSchedule.Balance = newPrincipalBalance;
                        amortizationSchedule.Date = EachMonth(startDate, endDate, year).ToList();
    
                    schedules.Add(amortizationSchedule);
                }
    
                return schedules;
            }
    
            // to calculate monthly EMI
            public static decimal monthlyPayments(decimal actualPrincipal, decimal rate, double loanTerm)
            {
                rate = rate / 1200;
                loanTerm = loanTerm * 12;
                decimal F = (decimal)Math.Pow((double)(1 + rate), loanTerm);
                return actualPrincipal * ((rate * F) / (F - 1));
            }
    
    // to get the time list of  months
            public static IEnumerable<DateTime> EachMonth(DateTime startDate, DateTime endDate , int term)
            {
                int months = term;
                startDate = DateTime.Now.Date;
                endDate = startDate.AddMonths(months);
    
    
                for (var day = startDate.Date; day.Date <= endDate.Date; day = day.AddMonths(1))
                    yield return day;
            }
    
    
        }
    
    
      [1]: https://i.stack.imgur.com/5bEo3.png
    
    公共类DLIB
    {
    公共列表摊销计划计算(十进制合计金额)
    ,十进制汇率,十进制首期付款
    ,int loantem,DateTime startDate)
    {
    十进制EMI;
    十进位本金=总金额-首付款;
    十进制月利息;
    十进制月原则;
    十进制新平衡;
    int numberOfEMI=loanTerm*12;
    国际年=国际年*12;
    DateTime Date=DateTime.Now;
    DateTime endDate=日期。添加月份(年);
    控制台写入线(结束日期);
    EMI=数学轮(月付款(本金、利率、贷款利率));
    列表计划=新列表();
    
    对于(int i=0;i而言,错误在于模型和计算方法。 该模型不应该具有List just plain date属性,并且foreach循环应该包含整个方法

    public class AmortizationSchedule{
            public DateTime Date { get; set; }
            public decimal Interest { get; set; }
            public decimal Balance { get; set; }
            public decimal Principal { get; set; }
    }
    
    方法应该是

            public List<AmortizationSchedule> AmortizationScheduleCalculation(decimal totalAmount
            , decimal rate, decimal downPayment
                ,int loanTerm, DateTime startDate)
            {
                decimal EMI;
                decimal principal = totalAmount - downPayment;
                decimal monthlyInterest;
                decimal monthlyPrincipal;
                decimal newPrincipalBalance;
                int numberOfEMI = loanTerm * 12;
                int year = loanTerm * 12;
    
                DateTime Date = DateTime.Now;
                DateTime endDate = Date.AddMonths(year);
    
                Console.WriteLine(endDate);
    
                EMI = Math.Round(monthlyPayments(principal, rate, loanTerm));
                List<AmortizationSchedule> schedules = new List<AmortizationSchedule>();
                int i = 0;
                var monthlyDateList = EachMonth(startDate, endDate, year).ToList();
                foreach (var item in monthlyDateList)
                {
                    monthlyInterest = Math.Round((principal * rate / 100) / 12);
                    monthlyPrincipal = Math.Round(EMI - monthlyInterest);
                    newPrincipalBalance = Math.Round(principal - monthlyPrincipal);
                    principal = newPrincipalBalance;
    
                    AmortizationSchedule amortizationSchedule = new AmortizationSchedule();
                    amortizationSchedule.Date = item;
                    amortizationSchedule.Interest = monthlyInterest;
                    amortizationSchedule.Principal = monthlyPrincipal;
                    amortizationSchedule.Balance = newPrincipalBalance;
                    schedules.Add(amortizationSchedule);
                    i++;
                }
    
                return schedules;
    
            }
    
    <table>
        <thead>
            <tr>
                <th>Date</th>
                <th>Interest</th>
                <th>Principal</th>
                <th>Balance</th>
    
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model)
            {
                <tr>
                    <td>
                        @item.Date.ToShortDateString()
                    </td>
                    <td>
                        @item.Interest
                    </td>
                    <td>
                        @item.Principal
                    </td>
                    <td>
                        @item.Balance
                    </td>
    
                </tr>
            }
            }
        </tbody>
    </table>
    
    公共列表分期付款计划计算(十进制合计金额)
    ,十进制汇率,十进制首期付款
    ,int loantem,DateTime startDate)
    {
    十进制EMI;
    十进位本金=总金额-首付款;
    十进制月利息;
    十进制月原则;
    十进制新平衡;
    int numberOfEMI=loanTerm*12;
    国际年=国际年*12;
    DateTime Date=DateTime.Now;
    DateTime endDate=日期。添加月份(年);
    控制台写入线(结束日期);
    EMI=数学轮(月付款(本金、利率、贷款利率));
    列表计划=新列表();
    int i=0;
    var monthlyDateList=每个月(开始日期、结束日期、年份)。ToList();
    foreach(月度数据表中的var项目)
    {
    monthlyInterest=数学四舍五入((本金*利率/100)/12);
    monthlyPrincipal=Math.Round(EMI-monthlyInterest);
    newPrincipalBalance=Math.Round(principal-monthlyPrincipal);
    principal=新PrincipalBalance;
    摊销计划摊销计划=新摊销计划();
    摊销计划。日期=项目;
    摊销计划。利息=月利息;
    分期付款计划。本金=每月本金;
    摊销计划。余额=新原则平衡;
    附表。添加(摊销附表);
    i++;
    }
    返回时间表;
    }
    
    这种观点应该是正确的

            public List<AmortizationSchedule> AmortizationScheduleCalculation(decimal totalAmount
            , decimal rate, decimal downPayment
                ,int loanTerm, DateTime startDate)
            {
                decimal EMI;
                decimal principal = totalAmount - downPayment;
                decimal monthlyInterest;
                decimal monthlyPrincipal;
                decimal newPrincipalBalance;
                int numberOfEMI = loanTerm * 12;
                int year = loanTerm * 12;
    
                DateTime Date = DateTime.Now;
                DateTime endDate = Date.AddMonths(year);
    
                Console.WriteLine(endDate);
    
                EMI = Math.Round(monthlyPayments(principal, rate, loanTerm));
                List<AmortizationSchedule> schedules = new List<AmortizationSchedule>();
                int i = 0;
                var monthlyDateList = EachMonth(startDate, endDate, year).ToList();
                foreach (var item in monthlyDateList)
                {
                    monthlyInterest = Math.Round((principal * rate / 100) / 12);
                    monthlyPrincipal = Math.Round(EMI - monthlyInterest);
                    newPrincipalBalance = Math.Round(principal - monthlyPrincipal);
                    principal = newPrincipalBalance;
    
                    AmortizationSchedule amortizationSchedule = new AmortizationSchedule();
                    amortizationSchedule.Date = item;
                    amortizationSchedule.Interest = monthlyInterest;
                    amortizationSchedule.Principal = monthlyPrincipal;
                    amortizationSchedule.Balance = newPrincipalBalance;
                    schedules.Add(amortizationSchedule);
                    i++;
                }
    
                return schedules;
    
            }
    
    <table>
        <thead>
            <tr>
                <th>Date</th>
                <th>Interest</th>
                <th>Principal</th>
                <th>Balance</th>
    
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model)
            {
                <tr>
                    <td>
                        @item.Date.ToShortDateString()
                    </td>
                    <td>
                        @item.Interest
                    </td>
                    <td>
                        @item.Principal
                    </td>
                    <td>
                        @item.Balance
                    </td>
    
                </tr>
            }
            }
        </tbody>
    </table>
    
    
    日期
    兴趣
    校长
    平衡
    @foreach(模型中的var项目)
    {
    @item.Date.ToShortDateString()的
    @项目.利息
    @项目.负责人
    @项目.结余
    }
    }
    
    @Rufus L感谢您的编辑