#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