///// <summary>
        ///// 方式:等本息还款
        ///// </summary>
        ///// <param name="totalPeriod">期限</param>
        ///// <param name="balance">总金额</param>
        ///// <param name="interestRate">年利率</param>
        //public static List<InstalmentDetail> CalculateEqualInstalment(PhysicalOrder order, decimal balance, int totalPeriod, InstalmentFrequence frequence, decimal interestRate, DateTime tradeDay, int decimals)
        //{
        //    //InstalmentDetailCalculator.Decimals = decimals;
        //    //decimal principal = 0;
        //    //decimal rate0 = decimal.MinValue, instalmentAmount = decimal.MinValue;
        //    //decimal remainBalance = balance;
        //    //List<InstalmentDetail> result = new List<InstalmentDetail>();
        //    //for (int eachPeriod = 1; eachPeriod <= totalPeriod; eachPeriod++)
        //    //{
        //    //    decimal interest = InstalmentDetailCalculator.Round(remainBalance * rate);//每期要还的利息
        //    //    if (rate != 0)
        //    //    {
        //    //        if (rate0 != rate)
        //    //        {
        //    //            instalmentAmount = GetRepaymentAmount(remainBalance, rate0 = rate, totalPeriod);//计算每期要还的钱
        //    //        }
        //    //        principal = instalmentAmount - interest;//每期要还的本金
        //    //        remainBalance -= principal;//剩余本金
        //    //        if (eachPeriod == totalPeriod && balance != 0)
        //    //        {
        //    //            principal += balance;
        //    //            interest -= balance;
        //    //            remainBalance = 0;
        //    //        }
        //    //    }
        //    //    else
        //    //    {
        //    //        instalmentAmount = principal;
        //    //    }
        //    //    var paymentDateTimeOnPlan = InstalmentCalculator.Default.CalculatePaymentDateTimeOnPlan(frequence, eachPeriod, tradeDay);
        //    //    var instalmentDetail = new InstalmentDetail(order, eachPeriod, principal, interest, 0m, paymentDateTimeOnPlan, null);
        //    //    result.Add(instalmentDetail);
        //    //}
        //    //return result;
        //}


        ///// <summary>
        ///// 方式:等本金还款
        ///// </summary>
        ///// <param name="totalPeriod">期限</param>
        ///// <param name="amount">总金额</param>
        ///// <param name="monthRate">年利率</param>
        //public static List<InstalmentDetail> CalculateEqualPrincipal(PhysicalOrder order, decimal amount, int totalPeriod, InstalmentFrequence frequence, decimal monthRate, DateTime tradeDay, int decimals)
        //{
        //    InstalmentDetailCalculator.Decimals = decimals;
        //    decimal principal = 0;
        //    decimal remainAmount = amount;
        //    principal = InstalmentDetailCalculator.Round(amount / totalPeriod);
        //    List<InstalmentDetail> result = new List<InstalmentDetail>();
        //    decimal interest = 0m;
        //    for (int eachPeriod = 1; eachPeriod <= totalPeriod; eachPeriod++)
        //    {
        //        principal = InstalmentDetailCalculator.Round(amount / totalPeriod);
        //        interest = InstalmentDetailCalculator.Round(remainAmount * monthRate);
        //        var instalmentDetail = InstalmentDetailCalculator.CalculateInstalmentDetail(order, rate, eachPeriod, frequence, tradeDay, totalPeriod, remainAmount, principal);
        //        result.Add(instalmentDetail);
        //        remainAmount = InstalmentDetailCalculator.Round(remainAmount - principal);//剩余本金
        //    }
        //    return result;
        //}



        private static InstalmentDetail CalculateInstalmentDetail(PhysicalOrder order, decimal rate, int instalmentPeriod, InstalmentFrequence frequence, DateTime tradeDay, int lastPeriod, decimal balance, decimal originPrincipal)
        {
            decimal interest  = 0m;
            decimal principal = originPrincipal;

            if (rate != 0)
            {
                interest = InstalmentDetailCalculator.Round(balance * rate);//每期要还的利息=上个月的剩余本金×每期利率
            }
            if (instalmentPeriod != 1)
            {
                if (instalmentPeriod == lastPeriod && balance != 0)
                {
                    principal = InstalmentDetailCalculator.Round(principal + balance);
                    if (rate != 0)
                    {
                        interest = InstalmentDetailCalculator.Round(interest - balance);
                    }
                }
            }
            var      instalmentAmount      = InstalmentDetailCalculator.Round(principal + interest);
            DateTime paymentDateTimeOnPlan = InstalmentCalculator.Default.CalculatePaymentDateTimeOnPlan(frequence, instalmentPeriod, tradeDay);

            return(new InstalmentDetail(order, instalmentPeriod, principal, interest, 0m, paymentDateTimeOnPlan, null));
        }
 public static string RoundToString(decimal dec)
 {
     return(InstalmentDetailCalculator.Round(dec).ToString().Replace(NumberFormatInfo.CurrentInfo.NumberDecimalSeparator, "."));
 }
        public static decimal GetRepaymentAmount(decimal balance, decimal rate, int installments)
        {
            double tmp = Math.Pow(1 + (double)rate, installments);//返回指定数字的指定次幂。

            return(InstalmentDetailCalculator.Round((decimal)((double)balance * (double)rate * tmp / (tmp - 1))));
        }