C#实现的等额本息法、按月付息到期还本法、一次性还本付息法

你若懂行,那便有用,如下:

void Main()
{
    var x = DengEBenXi.Compute(11111, 12, 3);
    x.Dump();
    var y = AnYueFuxiDaoqiHuanBen.Compute(11111, 12, 3);
    y.Dump();
    var z = YicixingHuanBenFuxi.Compute(11111, 12, 3);
    z.Dump();
}
    public class DengEBenXi
    {
        /// <summary>
        /// 等额本息法
        /// </summary>
        /// <param name="amountT">投资金额</param>
        /// <param name="yearRate">年利率</param>
        /// <param name="monthsx">投资期限,单位:月</param>
        /// <returns></returns>
        public static List<BackUnit> Compute(double amount, double yearRate, int months)
        {

var monthRate = (yearRate) / 1200.0;     //年利率转为月利率
            var datalist = new List<BackUnit>(); 
            var i = 0;
            var a = 0.0; // 偿还本息
            var b = 0.0; // 偿还利息
            var c = 0.0; // 偿还本金
            //利息收益
            var totalRateIncome =
                (amount * months * monthRate * Math.Pow((1 + monthRate), months)) / (Math.Pow((1 + monthRate), months) - 1) - amount;
            var totalIncome = totalRateIncome + amount;
            var d = amount + totalRateIncome; // 剩余本金

totalRateIncome = Math.Round(totalRateIncome * 100) / 100;// 支付总利息
            totalIncome = Math.Round(totalIncome * 100) / 100;
            a = totalIncome / months;    //每月还款本息
            a = Math.Round(a * 100) / 100;//每月还款本息

for (i = 1; i <= months; i++)
            {
                b = (amount * monthRate * (Math.Pow((1 + monthRate), months) - Math.Pow((1 + monthRate), (i - 1)))) / (Math.Pow((1 + monthRate), months) - 1);
                b = Math.Round(b * 100) / 100;
                c = a - b;
                c = Math.Round(c * 100) / 100;
                d = d - a;
                d = Math.Round(d * 100) / 100;
                if (i == months)
                {
                    c = c + d;
                    b = b - d;
                    c = Math.Round(c * 100) / 100;
                    b = Math.Round(b * 100) / 100;
                    d = 0;
                }

var unit = new BackUnit();
                unit.Number = i;// 期数
                unit.TotalRate = totalRateIncome;// 总利息
                unit.TotalMoney = totalIncome;// 总还款
                unit.A = a;// 偿还本息  someNumber.ToString("N2");
                unit.B = b;// 偿还利息
                unit.C = c;// 偿还本金
                unit.D = d;// 剩余本金
                datalist.Add(unit);
            }

return datalist;
        }
    }

public class AnYueFuxiDaoqiHuanBen
    {
        /// <summary>
        /// 按月付息到期还本
        /// </summary>
        /// <param name="amount">投资金额</param>
        /// <param name="yearRate">年利率</param>
        /// <param name="months">投资期限,单位:月</param>
        /// <returns></returns>
        public static List<BackUnit> Compute(double amount, double yearRate, int months)
        {
            var datalist = new List<BackUnit>();  //new Array(Deadline);     //

double rateIncome = amount * yearRate / 100 * (months / 12.0);
            double rateIncomeEve = (rateIncome / months);

var total = amount + rateIncome;

for (var i = 1; i < months; i++)
            {
                var unit = new BackUnit();
                unit.Number = i;// 期数
                unit.TotalRate = rateIncome;//Math.Round((Amount + TotalRate) * 100) / 100;// 总利息
                unit.TotalMoney = total;//TotalRate;// 总还款
                unit.A = rateIncomeEve;// 偿还本息  someNumber.ToString("N2");
                unit.B = rateIncomeEve;// 偿还利息
                unit.C = 0;// 偿还本金
                unit.D = amount * 1 + rateIncome * 1 - rateIncomeEve * i;// 剩余本金
                datalist.Add(unit);
            }

datalist.Add(new BackUnit() {
                Number= months,
                TotalRate = rateIncome,
                TotalMoney = total,
                A = amount + rateIncomeEve,
                B = rateIncomeEve,
                C = amount,
                D = 0
            });
            return datalist;
        }
    }

public class YicixingHuanBenFuxi
    {
        /// <summary>
        /// 一次性还本付息
        /// </summary>
        /// <param name="amount">投资金额</param>
        /// <param name="yearRate">年利率</param>
        /// <param name="months">投资期限,单位:月</param>
        /// <returns></returns>
        public static BackUnit Compute(double amount, double yearRate, int months)
        {
            BackUnit unit = new BackUnit();
            var rate = yearRate;
            var rateIncome = amount * rate / 100 * (months / 12.0);
            var totalIncome = amount + rateIncome;

unit.Number = 1;// 期数
            unit.TotalRate = rateIncome;//Math.Round((Amount + TotalRate) * 100) / 100;// 总利息
            unit.TotalMoney = totalIncome;//TotalRate;// 总还款
            unit.A = totalIncome;// 偿还本息  someNumber.ToString("N2");
            unit.B = rateIncome;// 偿还利息
            unit.C = 0;// 偿还本金
            unit.D = 0;// 剩余本金
            return unit;
        }
    }

public class BackUnit
    {
        //当前期数
        public int Number { get; set; }
        //总利息
        public double TotalRate { get; set; }
        //总还款
        public double TotalMoney { get; set; }
        //本期应还全部
        public double A { get; set; }
        //本期应还利息
        public double B { get; set; }
        //本期应还本金
        public double C { get; set; }
        //本期剩余本金
        public double D { get; set; }
    }

以下为运行结果:

再附送一个我所写的在线测试地址:http://p2p.tminji.com/phome/mockcompute

时间: 2024-11-09 01:54:56

C#实现的等额本息法、按月付息到期还本法、一次性还本付息法的相关文章

等额本息计算式的推导

其中P是全额, R是月息, N是期数. 对于等额本息, 每个月的还款数额相同, 但是利息是递减的, 第一个月是全额的一个月利息, 第二个月是去掉第一个月本金后剩余金额的一个月利息, 如下: 假定每月还款为x, 全额为m, 月息为r a1 = x - m*ra2 = x - (m - a1)*ra3 = x - (m - a1 - a2)*r...an = x - (m - a1 - ... - an-1)*ran+1 = x  (因为a1 + ... + an=m) 将a1代入a2的表达式, 然

银行等额本息还款算法

等额本息还款,也称定期付息,即借款人每月按相等的金额偿还贷款本息,其中每月贷款利息按月初剩余贷款本金计算并逐月结清.把按揭贷款的本金总额与利息总额相加,然后平均分摊到还款期限的每个月中.作为还款人,每个月还给银行固定金额,但每月还款额中的本金比重逐月递增.利息比重逐月递减. 每月还款额计算公式如下: 每月还款额=[贷款本金×月利率×(1+月利率)^还款月数]÷[(1+月利率)^还款月数-1] java代码如下: import java.math.BigDecimal; /**  * 等额本息还款

等额本息,等额本金,先息后本解读

本文转自https://zhuanlan.zhihu.com/p/31289465 先息后本:一般是指一年期的消费信贷,目前借款上限为30w,随借随还,按日计息,提前还款不罚息,每个月先付利息,第12个月还本金+第12个月利息.所以根据上文的例子,每个月的利息是:10w*5%/12=416.66. 第12个月支出10w本金+416.66. 两年总利息是1w.客户使用这种还款方式,最后的利率是 1w/10w/2*100%=5%2)等额本息:一般的银行贷款均可使用等额本息.等额本息是指:把贷款时间内

等额本息和等额本金计算

背景:一直以来不清楚等额本息和等额本金的计算过程,也不明白孰优孰劣,这里做个记录汇总 知乎答案 https://www.zhihu.com/question/21745865 作者:金斧子链接:https://www.zhihu.com/question/21745865/answer/26545005来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 经常会有人抱怨,选择了等额本息还款方式比等额本金还款方式下,同样的年限,但是利息支出会高出很多.所以,如果选择了等额

PHP房贷计算器代码,等额本息,等额本金

debx(); function debx() { $dkm = 240; //贷款月数,20年就是240个月 $dkTotal = 10000; //贷款总额 $dknl = 0.0515; //贷款年利率 $emTotal = $dkTotal * $dknl / 12 * pow(1 + $dknl / 12, $dkm) / (pow(1 + $dknl / 12, $dkm) - 1); //每月还款金额 $lxTotal = 0; //总利息 for ($i = 0; $i < $d

FOJ月赛 2014年11月 Problem D 礼物分配 中途相遇法

题目链接:点击打开链接 思路: 我们先把礼物平均分成2堆. 然后枚举1-(n/2)的所有二进制状态.0就给a,1就给b. 我们设此时a获得的价值和为A,b获得的价值和为B 那么对于一个状态我们就能得到 B-A. 给所有B-A排个序,得到数组K 对于另一半(n/2+1) -  n也这样枚举得到A-B.然后去K数组中二分查找距离-(A-B)最近的数即可.

Oracle 优化——位图、等索引介绍

一.位图索引 我将使用一个例子,来描述位图索引的存储,并分析它的优点. Table :Loans 放贷信息 ID userId 行业投向 币种 证件类型 还本付息方式 状态 1 1 农业 人民币 身份证 等额本息还款法 已上报 2 2 农业 人民币 身份证 等本还款法 未上报 3 1 工业 人民币 护照 按季计息到期还本法 已上报 4 2 个体 人民币 身份证 等本还款法 已上报 5 5 其他 人民币 身份证 按月计息到期还本法 未上报 我对行业投向,和还本付息方式添加了位图索引 create

互联网金融P2P主业务场景自动化测试

互联网金融P2P行业,近三年来发展迅速,如火如荼. 据不完全统计,全国有3000+的企业. P2P主要的业务场景概括地说有6个,请看下图: 我的想法是做成生产者-消费者模式,类似一个生态系统,将不会对测试环境造成不良影响. 假设发标仅受这些输入参数的影响: Parameters: 项目类型 [XX宝, XX贷, projectC, projectD] 期限单位 [天, 月] 还款方式 [到期还本付息, 按月付息到期还本, 月N日还息到期还本, 等额本息, 还款方式5] 道具 [coupon1, 

C语言 &#183; 还款计算

标题: 还款计算 银行贷款的等额本息还款方法是: 每月还固定的金额,在约定的期数内正好还完(最后一个月可能会有微小的零头出入). 比如说小明在银行贷款1万元.贷款年化利率为5%,贷款期限为24个月. 则银行会在每个月进行结算: 结算方法是:计算本金在本月产生的利息: 本金 x (年利率/12) 则本月本金结余为:本金 + 利息 - 每月固定还款额 计算结果会四舍五入到"分". 经计算,此种情况下,固定还款额应为:438.71 这样,第一月结算时的本金余额是: 9602.96 第二个月结