程序的基本规则:
落地价 = 裸车金额 + 保险金额 + 购置税(裸车金额/11.3)+其他费用
首付为落地价与贷款金额的差额(当贷款金额低于落地价时)。
-
银行贷款(等本等息)默认4.8%的年化率
- 每月月供计算为:贷款金额/60 + 贷款金额×(4.8/100)/12
- 输出全期还款、满1年提前还款(违约金5%)及满2年提前还款(无违约金)时的贷款还款总费用与实际付款(首付+贷款费用),同时输出每月月供。
-
厂商金融(等额本息)默认5年一共10.47%的年化率
- 每月月供计算为:贷款金额×(1+0.1047)/60
- 分别输出全期、半年提前还款(违约金3%)和2年提前还款的贷款还款总费用与实际付款,同时输出每月月供。
鉴于新手可能不会用程序,简单写一个Windows上使用的教程。
1,Windows下搜索框输入cmd,打开命令提示符
2,把程序拷到指定的目录,假设拷到D盘根目录
然后窗口直接输入
d:
启动程序
python xxx.py
实际运行结果:
import tkinter as tk
def calculate():
try:
car_price = float(entry_car.get())
insurance = float(entry_insurance.get())
other_fee = float(entry_other.get())
loan_amount = float(entry_loan.get())
except Exception as e:
text_result.delete("1.0", tk.END)
text_result.insert(tk.END, "请输入所有金额的有效数字!")
return
# 落地价计算
purchase_tax = car_price / 11.3
landed_price = car_price + insurance + purchase_tax + other_fee
# 首付(实际需要支付的差额)
down_payment = landed_price - loan_amount
if down_payment < 0:
down_payment = 0
# ------------------------------
# 银行贷款(等本等息,平息计算)
# ------------------------------
# 固定贷款期限为5年(60个月)
# 每月还款 = 贷款金额/60 + 贷款金额 * (4.8%/12)
bank_monthly = (loan_amount / 60) + (loan_amount * (4.8 / 100) / 12)
bank_full = 60 * bank_monthly
# 1年提前还款(12个月)
bank_months_1 = 12
bank_paid_1 = bank_months_1 * bank_monthly
bank_remaining_1 = loan_amount * (60 - bank_months_1) / 60
# 1年内提前还款需收剩余本金5%的违约金
bank_penalty_1 = bank_remaining_1 * 0.05
bank_total_1 = bank_paid_1 + bank_remaining_1 + bank_penalty_1
# 2年提前还款(24个月)
bank_months_2 = 24
bank_paid_2 = bank_months_2 * bank_monthly
bank_remaining_2 = loan_amount * (60 - bank_months_2) / 60
# 2年提前还款无违约金
bank_penalty_2 = 0
bank_total_2 = bank_paid_2 + bank_remaining_2 + bank_penalty_2
# ------------------------------
# 厂商金融(等额本息,简化处理)
# ------------------------------
# 5年总利息为贷款金额的10.47%
manuf_monthly = (loan_amount * (1 + 0.1047)) / 60
manuf_full = 60 * manuf_monthly
# 半年提前还款(6个月)
manuf_months_early = 6
manuf_paid_6 = manuf_months_early * manuf_monthly
manuf_remaining_6 = loan_amount * (60 - manuf_months_early) / 60
manuf_penalty_6 = manuf_remaining_6 * 0.03
manuf_total_6 = manuf_paid_6 + manuf_remaining_6 + manuf_penalty_6
# 2年提前还款(24个月)
manuf_months_2 = 24
manuf_paid_2 = manuf_months_2 * manuf_monthly
manuf_remaining_2 = loan_amount * (60 - manuf_months_2) / 60
manuf_penalty_2 = manuf_remaining_2 * 0.03
manuf_total_2 = manuf_paid_2 + manuf_remaining_2 + manuf_penalty_2
# ------------------------------
# 输出结果
# ------------------------------
result_text = "【落地价计算】\n"
result_text += f"购置税:{purchase_tax:.2f} 元\n"
result_text += f"落地价:{landed_price:.2f} 元\n"
result_text += f"首付(落地价-贷款金额):{down_payment:.2f} 元\n\n"
result_text += "【银行贷款(等本等息)】\n"
result_text += f"每月月供:{bank_monthly:.2f} 元\n"
result_text += f"全期还款(5年):贷款还款总费用 = {bank_full:.2f} 元\n"
result_text += f"实际付款(首付+全期贷款):{down_payment + bank_full:.2f} 元\n\n"
result_text += f"1年提前还款(12个月):\n"
result_text += f" 每月月供:{bank_monthly:.2f} 元\n"
result_text += f" 贷款还款总费用 = {bank_total_1:.2f} 元\n"
result_text += f" 实际付款(首付+1年贷款) = {down_payment + bank_total_1:.2f} 元\n\n"
result_text += f"2年提前还款(24个月):\n"
result_text += f" 每月月供:{bank_monthly:.2f} 元\n"
result_text += f" 贷款还款总费用 = {bank_total_2:.2f} 元\n"
result_text += f" 实际付款(首付+2年贷款) = {down_payment + bank_total_2:.2f} 元\n\n"
result_text += "【厂商金融(等额本息)】\n"
result_text += f"每月月供:{manuf_monthly:.2f} 元\n"
result_text += f"全期还款(5年):贷款还款总费用 = {manuf_full:.2f} 元\n"
result_text += f"实际付款(首付+全期贷款) = {down_payment + manuf_full:.2f} 元\n\n"
result_text += f"半年提前还款(6个月):\n"
result_text += f" 每月月供:{manuf_monthly:.2f} 元\n"
result_text += f" 贷款还款总费用 = {manuf_total_6:.2f} 元\n"
result_text += f" 实际付款(首付+半年贷款) = {down_payment + manuf_total_6:.2f} 元\n\n"
result_text += f"2年提前还款(24个月):\n"
result_text += f" 每月月供:{manuf_monthly:.2f} 元\n"
result_text += f" 贷款还款总费用 = {manuf_total_2:.2f} 元\n"
result_text += f" 实际付款(首付+2年贷款) = {down_payment + manuf_total_2:.2f} 元\n"
text_result.delete("1.0", tk.END)
text_result.insert(tk.END, result_text)
# ------------------------------
# 创建界面
# ------------------------------
root = tk.Tk()
root.title("车贷计算器")
# 裸车金额输入
label_car = tk.Label(root, text="汽车裸车金额(元):")
label_car.grid(row=0, column=0, padx=5, pady=5, sticky="e")
entry_car = tk.Entry(root)
entry_car.grid(row=0, column=1, padx=5, pady=5)
# 保险金额输入
label_insurance = tk.Label(root, text="保险金额(元):")
label_insurance.grid(row=1, column=0, padx=5, pady=5, sticky="e")
entry_insurance = tk.Entry(root)
entry_insurance.grid(row=1, column=1, padx=5, pady=5)
# 其他费用输入
label_other = tk.Label(root, text="其他费用(元):")
label_other.grid(row=2, column=0, padx=5, pady=5, sticky="e")
entry_other = tk.Entry(root)
entry_other.grid(row=2, column=1, padx=5, pady=5)
# 贷款金额输入(可低于落地价)
label_loan = tk.Label(root, text="贷款金额(元):")
label_loan.grid(row=3, column=0, padx=5, pady=5, sticky="e")
entry_loan = tk.Entry(root)
entry_loan.grid(row=3, column=1, padx=5, pady=5)
# 计算按钮
button_calc = tk.Button(root, text="计算", command=calculate)
button_calc.grid(row=4, column=1, padx=5, pady=10)
# 结果显示文本框
text_result = tk.Text(root, width=80, height=35)
text_result.grid(row=5, column=0, columnspan=2, padx=5, pady=5)
root.mainloop()