首页 > 编程语言 >C#实现的等额本息法、按月付息到期还本法、一次性还本付息法

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

时间:2023-08-28 23:45:52浏览次数:34  
标签:等额 C# double amount 还本付息 var 100 public unit

    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; }
    }

以下为运行结果:

 

标签:等额,C#,double,amount,还本付息,var,100,public,unit
From: https://www.cnblogs.com/lgx5/p/17663680.html

相关文章

  • Java - ReentrantLock锁分析
    Java-JUC核心类AbstractQueuedSynchronizer(AQS)底层实现  一. AQS内部结构介绍JUC是Java中一个包  java.util.concurrent 。在这个包下,基本存放了Java中一些有关并发的类,包括并发工具,并发集合,锁等。AQS(抽象队列同步器)是JUC下的一个基础类,大多数的并发工具都是基于......
  • bp利用CSRF漏洞(dvwa)
    打开dvwa,将难度调为low,点击CSRF,打开后发现有一个修改密码的输入框:在这里修改密码,并用bp抓包,在httphistory查看数据包,点击engagementtools中的GenerateCSRFPoc根据请求包生成一个CSRF攻击的网页:在生成的代码中修改密码为12345,点击testinbrowser在浏览器中测试:复制生成网页的UR......
  • bp利用CSRF漏洞(dvwa)
    打开dvwa,将难度调为low,点击CSRF,打开后发现有一个修改密码的输入框:在这里修改密码,并用bp抓包,在httphistory查看数据包,点击engagementtools中的GenerateCSRFPoc根据请求包生成一个CSRF攻击的网页:在生成的代码中修改密码为12345,点击testinbrowser在浏览器中测试:复制生成网页的UR......
  • 【STM32】7_0 ADC
    概述12位ADC是逐次趋近型模数转换器。它具有多达19个复用通道,可测量来自16个外部源、两个内部源和VBAT通道的信号。这些通道的A/D转换可在单次、连续、扫描或不连续采样模式下进行。ADC的结果存储在一个左对齐或右对齐的16位数据寄存器中。ADC具有模拟看门狗特......
  • 探索ChatGPT的Fine-tuning和Embeddings
    1.概述今天我们将深入探索ChatGPT的两项核心技术:Fine-tuning(微调)和Embeddings(嵌入)。这些技术在现代自然语言处理领域扮演着至关重要的角色,为模型的性能提升和适应特定任务需求提供了关键支持。ChatGPT作为GPT家族的一员,已经在多个领域展现了出色的表现,而其背后的Fine-tuning和Emb......
  • scipy简单介绍
    什么是scipy?Scipy(ScientificPython)是一个开源的、基于Python的科学计算库,旨在提供广泛的数学、科学和工程计算功能。它是Python生态系统中的重要组成部分之一,与NumPy(NumericalPython)库密切相关。scipy.optimize:提供了各种优化算法,用于寻找函数的最小值或最大值。scip......
  • 公司使用 ChatGPT 的 5 种创意方式
    编辑 人工智能可能不会接管世界,但这并不意味着它不会席卷世界。ChatGPT是最新的技术工具之一,受到了很多媒体的关注——这是有充分理由的。当人们探索这个平台时,他们发现了很多创造性的方法来将其最好的功能融入到他们的业务中。这也不意味着组织正在左右解雇员工。在ChatGPT的......
  • sqlalchemy使用简单教程
    一、基本使用importtimeimportthreadingimportsqlalchemyfromsqlalchemyimportcreate_enginefromsqlalchemy.engine.baseimportEngine#第一步生成一个engine对象engine=create_engine("mysql+pymysql://root:[email protected]:3306/flask?charset=utf8",......
  • CompletableFuture 使用
    importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;importjava.util.concurrent.CompletableFuture;importjava.util.concurrent.ExecutionException;/***@Author:TrueNewBee*@Date:2023/8/2823:05*@Github:https://github.com......
  • webpack生产环境优化:懒加载和预加载
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:懒加载和预加载一、直接加载浏览器一打开,直接加载了test.js这里使用了直接导入方式。直接导入:import{mul}from'./test';//./src/js/index.js//入口文件console.......