首页 > 其他分享 >贷款计算

贷款计算

时间:2024-03-21 16:44:58浏览次数:21  
标签:pay sum month 还款 计算 贷款 total round

#coding:utf-8
import sys
from prettytable import PrettyTable

'''
月利率 = 年利率/12

1.等额本息计算公式:每月还款金额 =〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数 - 1〕
  每月利息 = 每月还款金额 - (1 + 月利率 )^(还款期数-1) * (每月还款金额 - 月利率*贷款本金)
  每月偿还本金 = ( 1 + 月利率)^(还款期数-1) * (每月还款金额 - 月利率*贷款本金)

 
2.等额本金计算公式:每月还款金额 =(贷款本金 / 还款月数)+(本金 — 已归还本金累计额)* 每月利率
    每月偿还本金=贷款本金/还款月数
    每月利息=(本金-累计已还本金)×月利率

'''
YEAR_LPR=0.0385 #年利率
MONTH_LPR=round(YEAR_LPR/12,12) #月利率
UNIT= 10000 #单位万元

'''
月供计算
periods:第n期还款
pay_month:总还款月数
total:单位(万元)
等额本息:pay_way=1
等额本金:pay_way=2
'''

#月供
def get_month_pay(total,periods=1,pay_month=360,pay_way=1):
    result=0
    if pay_way==1:
        result = (total*UNIT*MONTH_LPR*((MONTH_LPR+1)**pay_month))/((MONTH_LPR+1)**pay_month-1)
    elif pay_way==2:
        result=(total*UNIT/pay_month)+(total*UNIT - (total*UNIT/pay_month)*(periods-1) )*MONTH_LPR
    return round(result,6)

#  每月还款利息
def get_month_interest(total,periods=1,pay_month=360,pay_way=1):
    result=0
    if pay_way==1:
        month_pay  = round((total*UNIT*MONTH_LPR*((MONTH_LPR+1)**pay_month))/((MONTH_LPR+1)**pay_month-1),6) #每月还款金额
        result = month_pay-((1 + MONTH_LPR)**(periods-1)) * (month_pay - MONTH_LPR * total * UNIT)
    elif pay_way==2:
        result = (total*UNIT - (total*UNIT/pay_month)*(periods-1) )*MONTH_LPR
    return round(result,6)

#每月还款本金
def get_month_principal(total,periods=1,pay_month=360,pay_way=1):
    result=0
    if pay_way==1:
        month_pay  = round((total*UNIT*MONTH_LPR*((MONTH_LPR+1)**pay_month))/((MONTH_LPR+1)**pay_month-1),6) #每月还款金额
        result = ((1 + MONTH_LPR)**(periods-1)) * (month_pay - MONTH_LPR * total* UNIT)

    elif pay_way==2:
        result = total*UNIT/pay_month
    return round(result,6)


def main(total,pay_month):
    tb = PrettyTable(["期数", "还款金额", "还款本金","还款利息","总还款数","总还款本金","剩余还款本金","总还款利息"])
    sum_month_pay1 =0 
    sum_month_pay2 =0
    sum_month_principal1=0
    sum_month_principal2 =0
    sum_month_interest1 = 0
    sum_month_interest2 = 0
    for periods in range(1,pay_month+1):
        month_pay1=get_month_pay(total,periods,pay_month,pay_way=1) #月供
        month_pay2=get_month_pay(total,periods,pay_month,pay_way=2)

        month_interest1 = get_month_interest(total,periods,pay_month,pay_way=1) #利息
        month_interest2 = get_month_interest(total,periods,pay_month,pay_way=2)

        month_principal1 = get_month_principal(total,periods,pay_month,pay_way=1)  #本金
        month_principal2 = get_month_principal(total,periods,pay_month,pay_way=2)

        sum_month_pay1 += month_pay1 #总还款数
        sum_month_pay2 += month_pay2

        sum_month_principal1 += month_principal1 #总还款本金
        sum_month_principal2 += month_principal2

        sum_month_interest1 += month_interest1 #总还款利息
        sum_month_interest2 += month_interest2


        


        row1=['等额本息-{}'.format(periods),round(month_pay1,2),round(month_principal1,2),round(month_interest1,2),round(sum_month_pay1,2),round(sum_month_principal1,2),
round(total*UNIT -sum_month_principal1,2),round(sum_month_interest1,2)] row2=['等额本金-{}'.format(periods),round(month_pay2,2),round(month_principal2,2),round(month_interest2,2),round(sum_month_pay2,2),round(sum_month_principal2,2),
round(total*UNIT -sum_month_principal2,2),round(sum_month_interest2,2)] tb.add_row(row1) tb.add_row(row2) # if periods>24:break print(tb) if __name__ == "__main__": main(45,360)

  

 

标签:pay,sum,month,还款,计算,贷款,total,round
From: https://www.cnblogs.com/boye169/p/18087708

相关文章

  • 【随机潮流】基于半不变量的概率潮流计算【IEEE34节点】(Matlab代码实现)
    ......
  • C语言之计算某日是该年的第几天
    目录一简介二代码实现三时空复杂度一简介 在C语言中,计算某日是该年的第几天通常涉及以下步骤:判断输入的年份是否为闰年。根据判断结果,确定当年二月的天数(28或29天)。然后,根据月份从前几个月开始累计天数。二代码实现以下是一个简单的C语言函数示例,它接收一......
  • html5&css&js代码 031 又一个计算器
    html5&css&js代码031又一个计算器一、代码二、解释又一个计算器页面。一、代码<!doctypehtml><htmllang="zh-cn"><head><metacharset="UTF-8"><title>计算器</title><style>body{......
  • 开源计算机视觉库OpenCV详解
    开源计算机视觉库OpenCV是一个功能强大的工具,用于实现各种计算机视觉应用。以下是对OpenCV的详细解释和使用示例:一、功能概述OpenCV涵盖了广泛的计算机视觉领域,包括但不限于以下功能:图像处理:包括图像加载、保存、调整大小、旋转、裁剪、滤波、边缘检测等。OpenCV提供了丰富......
  • python 计算两个字符串最长子串超级加速版
    importjsonimporttimefrommultiprocessingimportPool,Manager,freeze_supportfromnumbaimportjitimportpandasaspdfromtqdmimporttqdmdefdata_set(dataset):fori,one_datainenumerate(tqdm(dataset)):one=one_data[4].repla......
  • Copula估计边缘分布模拟收益率计算投资组合风险价值VaR与期望损失ES|附代码数据
    全文链接:http://tecdat.cn/?p=24753最近我们被客户要求撰写关于风险价值的研究报告,包括一些图形和统计输出。在这项工作中,我通过创建一个包含四只基金的模型来探索copula,这些基金跟踪股票、债券、美元和商品的市场指数摘要然后,我使用该模型生成模拟值,并使用实际收益和模拟收......
  • 计算机三级网络技术应用题方法
    应用题一、填表部分(方法)注意:第3、4空:当划分线后出现“全为0或全为1”时,将划分线前移到不出现“全为0或全为1”时为止172.0.147.192/30172.0.147.196/30172.0.147.160/29172.0.147.128/27172.0.32.0/22172.0.64.0/22S0的一端为1、3、5,S1的一端为2、4、6,注意审......
  • 计算机网络
    Tcp/Ip协议 DNS协议:迭代查询:这个结果不一定是关系,也可以是线索,线索有可能是结果(根域名)递归查询:必须回答目标ip与域名的关系(可以问别人)网络规划与设计逻辑网络设计:输出内容:逻辑网络设计图Ip地址方案安全方案招聘和培训网络员工的具体说明对软硬件,服务,员工和......
  • Java递归计算一个文件夹所有文件大小
    importjava.io.File;importjava.util.Scanner;publicclassDemo1{publicstaticvoidmain(String[]args){FiledirFile=getDirFile();System.out.println(countDirFile(dirFile));}/***计算文件夹大小*/public......
  • woe、iv、ks的计算和定义
    https://www.cnblogs.com/wqbin/p/10547628.htmlWOE的全称是“WeightofEvidence”,即证据权重。WOE是对原始自变量的一种编码形式。要对一个变量进行WOE编码,需要首先把这个变量进行分组处理(也叫离散化、分箱等等,说的都是一个意思)。分组后,对于第i组,WOE的计算公式如下:其中,pyi是......