PHP 之房贷计算器、组合贷

news2025/6/10 12:06:24

 一、等额本金

// (等额本金)
//$loanAmount=>贷款金额
//$loanPeriod=>贷款年限
//$interestRate=>贷款利息
function calculateEqualPrincipalPayment($loanAmount, $loanPeriod, $interestRate)
{
    $monthlyPrincipal = $loanAmount / ($loanPeriod * 12);
    $monthlyInterest = $loanAmount * ($interestRate / 100) / 12;
    $remainingAmount = $loanAmount;

    $result = [];

    for ($i = 1; $i <= $loanPeriod * 12; $i++) {
        $interest = $remainingAmount * ($interestRate / 100) / 12;
        $principal = $monthlyPrincipal;
        $remainingAmount -= $monthlyPrincipal;

        $monthlyPayment = $principal + $interest;

        $result[$i] = [
            'month' => $i,//期数
            'principal' => round($principal, 2),//月供本金
            'interest' => round($interest, 2),//月供利息
            'monthlyPayment' => round($monthlyPayment, 2),//月供总额
            'remainingAmount' => round($remainingAmount, 2),//剩余本金
        ];
    }

    return $result;
}

二、等额本息

 

// (等额本息)
//$loanAmount=>贷款金额
//$loanPeriod=>贷款年限
//$loanPeriod=>贷款利率
function calculateEqualInstallmentPayment($loanAmount, $loanPeriod, $interestRate)
{
    $monthlyInterestRate = $interestRate / 12 / 100;
    $numOfMonthlyPayments = $loanPeriod * 12;

    $monthlyPayment = $loanAmount * $monthlyInterestRate * pow(1 + $monthlyInterestRate, $numOfMonthlyPayments)
        / (pow(1 + $monthlyInterestRate, $numOfMonthlyPayments) - 1);

    $result = [];

    for ($i = 1; $i <= $numOfMonthlyPayments; $i++) {
        $interest = $loanAmount * $monthlyInterestRate;
        $principal = $monthlyPayment - $interest;
        $remainingAmount = $loanAmount - $principal;

        $result[$i] = [
            'month' => $i,//期数
            'principal' => round($principal, 2),//期数
            'interest' => round($interest, 2),//月供本金
            'monthlyPayment' => round($monthlyPayment, 2),//月供总额
            'remainingAmount' => round($remainingAmount, 2),//剩余本金
        ];

        $loanAmount = $remainingAmount;
    }

    return $result;
}

三、公积金和商业贷组合贷款

// 测试组合贷款计算()等额本息
function calculateCombinationLoan($commercialLoanAmount, $commercialLoanPeriod, $commercialInterestRate, $fundLoanAmount, $fundLoanPeriod, $fundInterestRate)
{
    // 计算商业贷款的还款计划
    $commercialRepayments = calculateEqualInstallmentPayment($commercialLoanAmount, $commercialLoanPeriod, $commercialInterestRate);

    // 计算公积金贷款的还款计划
    $fundRepayments = calculateEqualInstallmentPayment($fundLoanAmount, $fundLoanPeriod, $fundInterestRate);
    
    //判断公积金和商业贷那个贷款时间长,就以那个合并
    $arr_ti = $commercialRepayments;
    $arr_ti_duan = $fundRepayments;
    if ($fundLoanPeriod > $commercialLoanPeriod) {
        $arr_ti = $fundRepayments;
        $arr_ti_duan = $commercialRepayments;
    }
    $newArray = [];
    foreach ($arr_ti as $is => $repayment) {
        if ($fundLoanPeriod < $commercialLoanPeriod) {
            $shangye_monthlyPayment = $repayment["monthlyPayment"] ?: 0;
            $jijin_monthlyPayment = $arr_ti_duan[$is]["monthlyPayment"] ?: 0;
        } else {
            $shangye_monthlyPayment = $arr_ti_duan[$is]["monthlyPayment"]?: 0;
            $jijin_monthlyPayment = $repayment["monthlyPayment"] ?: 0;
        }

        $newArray[] = [
            "month" => $repayment["month"],//还款期数
            "jijin_monthlyPayment" => round($jijin_monthlyPayment, 2),//公积金金额
            "shangye_monthlyPayment" => round($shangye_monthlyPayment, 2),//商贷金额
            "monthlyPayment" => round(($repayment["monthlyPayment"] + $arr_ti_duan[$is]["monthlyPayment"]), 2),//总还款金额
            "interest" => round(($repayment["interest"] + $arr_ti_duan[$is]["interest"]), 2),//总还款利息
        ];
    }
    return $newArray;
}

// 测试组合贷款计算(等额本金)
function calculatePrincipaltionLoan($commercialLoanAmount, $commercialLoanPeriod, $commercialInterestRate, $fundLoanAmount, $fundLoanPeriod, $fundInterestRate)
{
    // 计算商业贷款的还款计划
    $commercialRepayments = calculateEqualPrincipalPayment($commercialLoanAmount, $commercialLoanPeriod, $commercialInterestRate);

    // 计算公积金贷款的还款计划
    $fundRepayments = calculateEqualPrincipalPayment($fundLoanAmount, $fundLoanPeriod, $fundInterestRate);

    //判断公积金和商业贷那个贷款时间长,就以那个合并
    $arr_ti = $commercialRepayments;
    $arr_ti_duan = $fundRepayments;

    if ($fundLoanPeriod > $commercialLoanPeriod) {
        $arr_ti = $fundRepayments;
        $arr_ti_duan = $commercialRepayments;
    }
    $newArray = [];
    foreach ($arr_ti as $is => $repayment) {
        if ($fundLoanPeriod < $commercialLoanPeriod) {
            $shangye_monthlyPayment = $repayment["monthlyPayment"] ?: 0;
            $jijin_monthlyPayment = $arr_ti_duan[$is]["monthlyPayment"] ?: 0;
        } else {
            $shangye_monthlyPayment = $arr_ti_duan[$is]["monthlyPayment"]?: 0;
            $jijin_monthlyPayment = $repayment["monthlyPayment"] ?: 0;
        }

        $newArray[] = [
            "month" => $repayment["month"],
            "jijin_monthlyPayment" => round($jijin_monthlyPayment, 2),
            "shangye_monthlyPayment" => round($shangye_monthlyPayment, 2),
            "monthlyPayment" => round(($repayment["monthlyPayment"] + $arr_ti_duan[$is]["monthlyPayment"]), 2),
            "interest" => round(($repayment["interest"] + $arr_ti_duan[$is]["interest"]), 2),
        ];
    }
    return $newArray;
}

四、可实现效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/863025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#引用Web Service 类型方法,添加搜索本地服务器Web Service 接口调用方法

首先保证现在网络能调用web service接口&#xff0c;右键项目添加服务引用 ![![在这里插入图片描述](https://img-blog.csdnimg.cn/555ba4fa5e2a418f8f85539a9406bcd6.png) 点击高级 添加web服务 输入搜索的服务器接口&#xff0c;选中你要添加调用的方法即可 添加完成调用方…

性能优化-react阻止子组件重渲染

因为父组件的状态变更会触发子组件的渲染&#xff0c;可以用shouldComponentUpdate或memo来阻止。下面就来介绍这两种方法。 类组件-shouldComponentUpdate 注&#xff1a;变化需要在render中打印&#xff0c;在component中检测不到 核心代码: 子组件中用shouldComponentUpda…

[保研/考研机试] KY87 鸡兔同笼 北京大学复试上机题 C++实现

描述 一个笼子里面关了鸡和兔子&#xff08;鸡有2只脚&#xff0c;兔子有4只脚&#xff0c;没有例外&#xff09;。已经知道了笼子里面脚的总数a&#xff0c;问笼子里面至少有多少只动物&#xff0c;至多有多少只动物。 输入描述&#xff1a; 每组测试数据占1行&#xff0c;…

互联网企业帮助中心,普遍都会有的痛点与挑战!

互联网企业不乏在线创意软件工具的“学习、帮助和支持”内容&#xff0c;但他们知道&#xff0c;他们增长最快的细分市场——新手用户——很难找到看似简单的问题的答案&#xff0c;例如“我如何裁剪这张照片”&#xff1f;等等常见问题&#xff0c;一时难觅。自然而然&#xf…

【MySQL】InnoDB存储引擎详解

InnoDB引擎是MySQL5.5版本之后默认的存储引擎 逻辑存储结构 首先是表空间Tablespace&#xff08;ibd文件&#xff09;&#xff1a;一个mysql实力可以对应多个表空间&#xff0c;用于存储及记录&#xff0c;索引等数据 这些存储记录&#xff0c;索引等数据中是用段(Segment)来…

使用KETTLE工具在Oracle和Dm8之间迁移数据

oracle 代码测试数据 CREATE TABLE PRODUCT_CATEGORY ( PRODUCT_CATEGORYID NUMBER(11,0) NOT NULL , NAME VARCHAR2(255) NOT NULL ENABLE, PRIMARY KEY (PRODUCT_CATEGORYID) )INSERT ALL into PRODUCT_CATEGORY(PRODUCT_CATEGORYID, NAME)VALUES(2,国学) into PRODUCT_CATEG…

可以重复烧写的语音ic有哪些特征和优势

目录 一、简介可擦写的语音芯片&#xff0c;其实就是MCUflash的架构&#xff0c;无其他说法&#xff0c;就这一种说法。这个就是它最大的特征尤其是SOP8的封装类型的芯片&#xff0c;是区别于OTP类型的另一个品类&#xff0c;基本上OTP的语音芯片适用的场景。他都可以满足和替代…

【冒泡排序及其优化】

冒泡排序及其优化 冒泡排序核心思想 冒泡排序的核⼼思想就是&#xff1a;两两相邻的元素进⾏⽐较 1题目举例 给出一个倒序数组&#xff1a;arr[10]{9,8,7,6,5,4,3,2,1,0} 请排序按小到大输出 1.1题目分析 这是一个完全倒序的数组&#xff0c;所以确定冒泡排序的趟数&#xff0…

机器学习笔记之优化算法(十三)关于二次上界引理

机器学习笔记之优化算法——关于二次上界引理 引言回顾&#xff1a;利普希兹连续梯度下降法介绍 二次上界引理&#xff1a;介绍与作用二次上界与最优步长之间的关系二次上界引理证明过程 引言 本节将介绍二次上界的具体作用以及它的证明过程。 回顾&#xff1a; 利普希兹连续…

svg圆形进度条

css3实现的圆形进度条较复杂&#xff0c;代码量较多&#xff0c;本文稍微讲解下如何使用svg实现圆形进度条。 svg实现一个圆用<circle>元素&#xff1a; <svg viewBox"0 0 100 100" xmlns"http://www.w3.org/2000/svg"><circle cx"50…

腾讯云服务器CPU标准型S5/S6/SA3/SR1/SA2处理器大全

腾讯云服务器CVM标准型CPU处理器大全&#xff0c;包括标准型S6、SA3、SR1、S5、S5se、SA2、S4、SN3ne、S3、SA1、S2ne实例CPU处理器型号大全&#xff0c;标准型S6云服务器CPU采用Intel Ice Lake(2.7GHz/3.3GHz)&#xff0c;标准型S5采用Intel Xeon Cascade Lake 8255C/Intel Xe…

day4 USART串口的应用

同步和异步通信 通信&#xff0c;最少要有两个对象&#xff0c;一个收&#xff0c;一个发。 同步通信&#xff1a;一般情况下同步通信指的是通信双方根据同步信号进行通信的方式。比如通信双方有一个共同的时钟信号&#xff0c;大家根据时钟信号的变化进行通信。 异步通信&…

Stable Diffusion - 幻想 (Fantasy) 风格与糖果世界 (Candy Land) 人物提示词配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132212193 图像由 DreamShaper8 模型生成&#xff0c;融合糖果世界。 幻想 (Fantasy) 风格图像是一种以想象力为主导的艺术形式&#xff0c;创造了…

2023MacBook电脑清理垃圾软件CleanMyMac X

用久了的MacBook&#xff0c;会出现系统反应缓慢卡顿等现象&#xff0c;这主要原因是系统垃圾的堆积。MacBook清理&#xff0c;就很有必要了&#xff0c;特别的垃圾清理。因此&#xff0c;定期清理这些垃圾文件是保持MacBook高效运行的重要任务之一。本文将介绍一些高效的方法&…

【LeetCode】122. 买卖股票的最佳时机 II - 贪婪算法

目录 2023-8-10 10:29:32 122. 买卖股票的最佳时机 II 2023-8-10 10:29:32 没错&#xff0c;还是用双指针思想来套出来的。 感觉步骤很复杂&#xff0c;还调试了半天。 class Solution {public int maxProfit(int[] prices) {int pre 0;int last 1;int maxProfit 0;int c…

timerfd和timer

note timerfd对应的时钟到期后&#xff0c;对应内部数据(uint64)计数加1 timerfd支持read方法&#xff0c;poll方法 code #include <sys/timerfd.h> #include <poll.h> #include <thread> #include <stdio.h> #include <string.h> #include …

代码随想录算法训练营day29 | 491. 递增子序列,46. 全排列,47. 全排列 II

目录 491. 递增子序列 46. 全排列 47. 全排列 II 491. 递增子序列 难度&#xff1a;medium 类型&#xff1a;回溯&#xff0c;类子集问题 思路&#xff1a; 因为不能排序&#xff0c;所以不能使用 40. 组合总和 II 的去重方式。使用hashset来对递归树的某一层去重。 代码…

为什么要学习Oracle技术?

为什么要学习Oracle技术? 众所周知&#xff0c;Oracle占据着企业数据库领域超过48.1%的市场份额&#xff0c;成为高端企业数据库软件的绝对领导者。随着时间的推移&#xff0c;企业数据库的规模不断扩大&#xff0c;富有经验的资深OracleDBA越来越受到企业的欢迎。我们从著名的…

cmake基础(2)——动/静态库

一、静态库创建 1. 准备 首先创建目录和文件结构如下&#xff1a; 文件内容如下&#xff1a; class Hello { public:void print(); }; #include "hello.h" #include <iostream>void Hello::print() {std::cout << "hello world!" <<…

详细记录Pycharm配置已安装好的Conda虚拟环境

当安装好conda环境之后&#xff0c;想要在Pycharm中使用&#xff0c;那么就要在Pycharm中导入&#xff0c;我这里使用的pycharm-professional-2023.2这个版本&#xff0c;下面是详细步骤&#xff1a; 1.打开File->Settings&#xff1a; 2.找到Project——>Python Inter…