汽车贷款的原理其实并不复杂,一般来说,每月还贷金额不要超过每月工资总额的30%基本就可以了,但是呢,划不划算就需要计算一下了。
由于我不是富豪,所以我会选择汽车分期,而汽车分期呢实际上是一种分期付款的信用贷,不需要抵押。贷款期限主要集中在3-10年左右,有些是15年,但利息会较高的。
还好,我是做过财务,这些计算难不到我,以下是代码:
from decimal import Decimal, getcontext
getcontext().prec = 50 # 设置精度
loan_amount = Decimal(input("请输入你的汽车贷款金额:"))
annual_interest_rate = Decimal(input("请输入你的贷款年利率(例如:0.05):"))
loan_years = int(input("请输入你的汽车贷款年限:"))
car_amount=Decimal(input("请输入你的汽车售价:"))
monthly_payment = (loan_amount * (annual_interest_rate / 12)) / (1 - (1 + (annual_interest_rate / 12)) ** (-loan_years * 12))
无论是等额本金还是年额本息,计算出本利和除以贷款利限就可以了。
然后判读是否超出你的工资水平。
当然,由于通货膨胀和工资增长率对你的未来的工资水平都会有影响,这部分我会加上去。
monthly_salary = float(input("请输入你的月薪:"))
inflation_rate = float(input("请输入通货膨胀率(例如:0.02):"))
salary_growth_rate = float(input("请输入年工资增长率(例如:0.03):"))
total_salary = 0
years = loan_years
for _ in range(years):
total_salary += monthly_salary * 12
monthly_salary += monthly_salary * (salary_growth_rate/12)
monthly_salary /= (1 + (inflation_rate/12))
如果超出你的工资水平,那就不要贷款了,因为汽车只是一个消费品,你又不是真的做滴滴,并不是生产工具,如果没有超,那可以接下来计算是不是真的划算。
在理论上,汽车的折旧是按汽车的使用年限来的,当然,这里我按你贷款的年限来,毕竟你如果贷了10年,但汽车只用了5年,那就不准确了。
而汽车是有残值的,当然,不能真的按废品卖,最少能值10%吧。即10万元的车,最少还能值1万元。当然,这是简单的计算。
monthly_total_salary = Decimal(total_salary) / years / 12
monthly_burden = monthly_total_salary * Decimal("0.3")
car_annual=car_amount* Decimal('0.3')/years/12##汽车月折旧
结合以上代码,如果你每月的还款金额小于你每月的汽车折旧额,相对来说,是比较划算的。即你利用银行的钱跑赢了你的折旧成本。相反,就不划算了。
于是结合以上代码:具体的代码如下:
from decimal import Decimal, getcontext
getcontext().prec = 50 # 设置精度
def calculate_monthly_payment(loan_amount, annual_interest_rate, loan_years):
monthly_interest_rate = annual_interest_rate / 12
numerator = loan_amount * monthly_interest_rate
denominator = 1 - (1 + monthly_interest_rate) ** (-loan_years * 12)
return Decimal(numerator / denominator)
def can_repay_loan(age, monthly_salary, inflation_rate, salary_growth_rate, loan_amount, annual_interest_rate, loan_years):
total_salary = 0
years = loan_years
for _ in range(years):
total_salary += monthly_salary * 12
monthly_salary += monthly_salary * (salary_growth_rate/12)
monthly_salary /= (1 + (inflation_rate/12))
monthly_total_salary = Decimal(total_salary) / years / 12
monthly_burden = monthly_total_salary * Decimal("0.3")
car_annual = car_amount * Decimal('0.9') / years / 12
monthly_payment = calculate_monthly_payment(loan_amount, annual_interest_rate, loan_years)
if monthly_payment > monthly_burden:
return False, monthly_payment, car_annual
else:
return True, monthly_payment, car_annual
loan_amount = Decimal(input("请输入你的汽车贷款金额:"))
annual_interest_rate = Decimal(input("请输入你的贷款年利率(例如:0.05):"))
loan_years = int(input("请输入你的汽车贷款年限:"))
car_amount = Decimal(input("请输入你的汽车售价:"))
monthly_salary = float(input("请输入你的月薪:"))
inflation_rate = float(input("请输入通货膨胀率(例如:0.02):"))
salary_growth_rate = float(input("请输入年工资增长率(例如:0.03):"))
repayable, monthly_payment, car_annual = can_repay_loan(age, monthly_salary, inflation_rate, salary_growth_rate, loan_amount, annual_interest_rate, loan_years)
if monthly_payment < monthly_burden:
print("可以贷款,你每月还款金额为{:.2f}元。".format(float(monthly_payment)), "不会超过你的负担能力。")
if car_annual >monthly_payment :
print("而且很划算,小于汽车折旧{:.2f}元。".format(float(car_annual)))
elif car_annual < monthly_payment :
print("但并不划算,大于汽车折旧{:.2f}元。".format(float(car_annual)))
elif monthly_payment > monthly_burden:
print("不建议贷款,你每月还款金额为{:.2f}元。".format(float(monthly_payment)), "超过了你的负担能力。")
当然,为了循环使用,我加上循环语句,这样的话,可以不断的测试。
总的来说,很多4S店有分期贷款服务,打工人不会不考虑一下分期,但分期的方案很多,可以用上面的代码进行测算,另外,对于需要购买汽车但不确定是否应该贷款的人来说,上以代码也可以试试。
我不是专业的程序员,我只是分享一下财务知识,代码写得不好,不要见怪。