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感谢您的编辑