买房和租房哪个划算?

目录

1、考虑因素

1. 1费用比较

1.2 资产增值

1.3 税收影响

1.4 灵活性

1.5 贷款利率

1.6 长期计划

1.7 当地市场条件

2、买房计算

2.1等额本息

2.2等额本金

3、租房计算


1、考虑因素

在比较买房和租房哪个更划算时,需要考虑多个因素。以下是一些可以考虑的关键因素:

1. 1费用比较

- 购房成本:
  - 需要支付首付、贷款利息、房屋保险、物业税等费用。
  - 考虑房屋增值潜力。

- 租房成本:
  - 考虑每月租金和可能的租金涨幅。

1.2 资产增值

- 购房:
  - 房产可能随着时间增值,为未来提供资产。
  - 房屋装修和维护可能增加价值。

- 租房:
  - 租房没有资产增值,支付的租金相当于居住成本。

1.3 税收影响

- 购房:
  - 购房可能有税收优惠,如抵扣贷款利息和物业税。

- 租房:
  - 租房者可能享受一些租房税收减免。

1.4 灵活性

- 购房:
  - 房屋购买可能会锁定在一个地方,缺乏灵活性。

- 租房:
  - 租房提供更大的灵活性,可以更容易地搬迁。

1.5 贷款利率

- 购房:
  - 贷款利率对购房成本有重要影响,需要注意市场利率的变化。

1.6 长期计划

- 购房:
  - 适合长期居住,具有稳定性和长期投资回报。

- 租房:
  - 适合短期或暂时居住,提供更大的灵活性。

1.7 当地市场条件

- 购房:
  - 当地房地产市场的供需情况、增值潜力等。

- 租房:
  - 当地租金水平和租房市场的情况。

通过综合考虑这些因素,可以更全面地评估在特定情况下是购房更划算还是租房更划算。

2、买房计算

2.1等额本息

等额本息是一种贷款的还款方式,指的是在还款期内,每月偿还同等数额的贷款(包括本金和利息)。这种还款方式便于规划个人财务,可以避免因还款压力过大而导致的经济困难。

计算公式如下:

每月还款额 = (贷款本金 × 月利率 × (1 + 月利率)^还款月数) ÷ [(1 + 月利率)^还款月数 - 1]

其中,月利率 = 年利率 ÷ 12;还款月数 = 贷款年限 × 12。

# 等额本息(均使用基准利率)
# 商业贷款利率:4.9%
commercial_loan_rate=4.9
# 公积金利率:3.25%
provident_fund_rate=3.25
# 每月还款额=贷款本金×[月利率×(1+月利率) ^ 还款月数]÷{[(1+月利率) ^ 还款月数]-1}
while True:
    loan_type = input("请选择贷款类型:1.商业贷款  2.公积金贷款  3.组合贷款 (输入 'exit' 退出)\n")

    # Exiting the loop
    if loan_type.lower() == 'exit':
        print("程序已退出。")
        break
    # 贷款金额
    if loan_type != '3':
        loan_amount = float(input("请输入贷款金额(万)\n"))
        term = int(input("请选择期限(年):5、10、15、20、25\n"))
        if term in [5,10,15,20,25]:
            if term==5:
                mon_rate = ((commercial_loan_rate-0.15) / 100) / 12  # 计算月利率
                # 计算每月应还金额
                mon_pay = loan_amount * 10000 * (mon_rate * ((1 + mon_rate) ** (term * 12))) / (
                        ((1 + mon_rate) ** (term * 12)) - 1)
                # 计算还款总额
                all_pay = mon_pay * term * 12
                # 计算支付利息
                interest = all_pay - loan_amount * 10000
                print("每月月供参考(元):{:.2f}元".format(mon_pay))
                print("支付利息(元):{:.2f}元".format(interest))
                print("还款总额(元):{:.2f}元".format(all_pay))

            else:
                # 商业贷款
                if loan_type == '1':  # 商业贷款
                    mon_rate = (commercial_loan_rate / 100) / 12  # 计算月利率
                    # 计算每月应还金额
                    mon_pay = loan_amount * 10000 * (mon_rate * ((1 + mon_rate) ** (term * 12))) / (
                            ((1 + mon_rate) ** (term * 12)) - 1)
                    # 计算还款总额
                    all_pay = mon_pay * term * 12
                    # 计算支付利息
                    interest = all_pay - loan_amount * 10000
                    print("每月月供参考(元):{:.2f}元".format(mon_pay))
                    print("支付利息(元):{:.2f}元".format(interest))
                    print("还款总额(元):{:.2f}元".format(all_pay))

                elif loan_type == '2':  # 公积金贷款
                    if term==5:
                        mon_rate = ((provident_fund_rate-0.5) / 100) / 12  # 计算月利率
                    else:
                        mon_rate = (provident_fund_rate / 100) / 12  # 计算月利率
                        # 计算每月应还金额
                    mon_pay = loan_amount * 10000 * (mon_rate * ((1 + mon_rate) ** (term * 12))) / (
                            ((1 + mon_rate) ** (term * 12)) - 1)
                    # 计算还款总额
                    all_pay = mon_pay * term * 12
                    # 计算支付利息
                    interest = all_pay - loan_amount * 10000
                    print("每月月供参考(元):{:.2f}元".format(mon_pay))
                    print("支付利息(元):{:.2f}元".format(interest))
                    print("还款总额(元):{:.2f}元".format(all_pay))
        else:
            print('请输入合法的期限')
    else:
        # 商贷金额
        business_loan = float(input("请输入商业贷款金额(万):\n"))
        # 公积金贷款
        fund_loan = float(input("请输入公积金贷款金额(万):\n"))
        term = int(input("请选择期限(年):5、10、15、20、25\n"))
        if term in [5, 10, 15, 20, 25]:
            if term ==5:
                business_mon_rate = ((commercial_loan_rate-0.15) / 100) / 12  # 商贷月利率
                found_mon_rate = ((provident_fund_rate-0.5) / 100) / 12  # 公积金月利率
            else:

                business_mon_rate = (commercial_loan_rate / 100) / 12  # 商贷月利率
                found_mon_rate = (provident_fund_rate / 100) / 12  # 公积金月利率
            # 计算商业贷款 每月应还金额
            business_mon_pay = business_loan * 10000 * (business_mon_rate * ((1 + business_mon_rate) ** (term * 12))) / (
                    ((1 + business_mon_rate) ** (term * 12)) - 1)
            # 计算公积金贷款 每月应还金额
            found_mon_pay = fund_loan * 10000 * (found_mon_rate * ((1 + found_mon_rate) ** (term * 12))) / (
                    ((1 + found_mon_rate) ** (term * 12)) - 1)
            # 每月总应还
            mon_all_pay = business_mon_pay + found_mon_pay

            all_pay = mon_all_pay * term * 12
            # 计算支付利息
            interest = all_pay - (business_loan + fund_loan)*10000
            print("每月月供参考(元):{:.2f}元".format(mon_all_pay))
            print("支付利息(元):{:.2f}元".format(interest))
            print("还款总额(元):{:.2f}元".format(all_pay))
        else:
            print('请输入合法的期限')


请选择贷款类型:1.商业贷款  2.公积金贷款  3.组合贷款 (输入 'exit' 退出)
1
请输入贷款金额(万)
200
请选择期限(年):5、10、15、20、25
20
每月月供参考(元):13088.88元
支付利息(元):1141331.44元
还款总额(元):3141331.44元
请选择贷款类型:1.商业贷款  2.公积金贷款  3.组合贷款 (输入 'exit' 退出)
exit
程序已退出。

2.2等额本金

等额本金是一种贷款的还款方式,指的是在还款期内,每月偿还相同数额的本金,但利息随剩余本金逐月递减。这种还款方式相对等额本息而言,总的利息支出较低,但是前期支付的本金和利息较多,还款负担逐月递减。这种方式很适合收入较高,但是已经预计到将来收入会减少的人群。

计算公式如下:

每月归还本金 = 贷款本金 ÷ 还款月数;

每月归还利息 = 剩余本金 × 月利率。

from tkinter import *


class Calculator:
    def __init__(self):
        window = Tk()  # 建立窗口
        window.title("房贷计算器")  # 命名窗口标题

        # 定义StringVar对象动态存储输入框的值
        self.amountVar = StringVar()  # 贷款金额
        self.rateVar = StringVar()  # 年化利率
        self.yearsVar = StringVar()  # 贷款年限
        self.monthsVar = StringVar()  # 已还期数
        self.monthVar = StringVar()  # 第i月
        self.total_1Var = StringVar()  # 等额本息总还款额
        self.totalInterest_1Var = StringVar()  # 等额本息总利息
        self.totalRepayment_1Var = StringVar()  # 等额本息累计已还
        self.remain_1Var = StringVar()  # 等额本息待还金额
        self.monthRepayment_1Var = StringVar()  # 等额本息第i月应还
        self.total_2Var = StringVar()  # 等额本金总还款额
        self.totalInterest_2Var = StringVar()  # 等额本金总利息
        self.totalRepayment_2Var = StringVar()  # 等额本金累计已还
        self.remain_2Var = StringVar()  # 等额本金待还金额
        self.monthRepayment_2Var = StringVar()  # 等额本金第i月应还

        # 设置一些默认值
        self.monthsVar.set("0")
        self.monthVar.set('1')

        # 整体面板,设置总体的边距
        frame = Frame(window)
        frame.pack(padx=20, pady=20)

        """
        添加标签
        .grid(row, column)设置标签位置
        """
        Label(frame, text="贷款金额").grid(row=1, column=1, columnspan=3)
        Label(frame, text="年化利率").grid(row=2, column=1, columnspan=3)
        Label(frame, text="贷款年限").grid(row=3, column=1, columnspan=3)
        Label(frame, text="已还期数").grid(row=4, column=1, columnspan=3)
        Label(frame, text="总还款额").grid(row=7, column=1, columnspan=3)
        Label(frame, text="总利息额").grid(row=8, column=1, columnspan=3)
        Label(frame, text="累计已还").grid(row=9, column=1, columnspan=3)
        Label(frame, text="剩余待还").grid(row=10, column=1, columnspan=3)
        Label(frame, text="第").grid(row=11, column=1)
        Label(frame, text="月应还").grid(row=11, column=3)

        """
        添加输入和输出框
        textvariable = self.amountVar 由相应的StringVar对象动态保存输入框中的文本
        justify=RIGHT 输入框中的文本右对齐
        sticky=E 控件在单元格中右对齐
        """
        Entry(frame, justify=RIGHT, textvariable=self.amountVar).grid(row=1, column=4)
        Entry(frame, justify=RIGHT, textvariable=self.rateVar).grid(row=2, column=4)
        Entry(frame, justify=RIGHT, textvariable=self.yearsVar).grid(row=3, column=4)
        Entry(frame, justify=RIGHT, textvariable=self.monthsVar).grid(row=4, column=4)
        Entry(frame, width=4, justify=CENTER, textvariable=self.monthVar).grid(row=11, column=2)
        Label(frame, textvariable=self.total_1Var).grid(row=7, column=4, sticky=E)
        Label(frame, textvariable=self.total_2Var).grid(row=7, column=6, sticky=E)
        Label(frame, textvariable=self.totalInterest_1Var).grid(row=8, column=4, sticky=E)
        Label(frame, textvariable=self.totalInterest_2Var).grid(row=8, column=6, sticky=E)
        Label(frame, textvariable=self.totalRepayment_1Var).grid(row=9, column=4, sticky=E)
        Label(frame, textvariable=self.totalRepayment_2Var).grid(row=9, column=6, sticky=E)
        Label(frame, textvariable=self.remain_1Var).grid(row=10, column=4, sticky=E)
        Label(frame, textvariable=self.remain_2Var).grid(row=10, column=6, sticky=E)
        Label(frame, textvariable=self.monthRepayment_1Var).grid(row=11, column=4, sticky=E)
        Label(frame, textvariable=self.monthRepayment_2Var).grid(row=11, column=6, sticky=E)

        # 添加Message存储单位
        Message(frame, text="元").grid(row=1, column=5)
        Message(frame, text="%").grid(row=2, column=5)
        Message(frame, text="年").grid(row=3, column=5)
        Message(frame, text="月").grid(row=4, column=5)
        Message(frame, text="元").grid(row=7, column=5)
        Message(frame, text="元").grid(row=7, column=7)
        Message(frame, text="元").grid(row=8, column=5)
        Message(frame, text="元").grid(row=8, column=7)
        Message(frame, text="元").grid(row=9, column=5)
        Message(frame, text="元").grid(row=9, column=7)
        Message(frame, text="元").grid(row=10, column=5)
        Message(frame, text="元").grid(row=10, column=7)
        Message(frame, text="元").grid(row=11, column=5)
        Message(frame, text="元").grid(row=11, column=7)

        # 空Frame以撑开空间
        Frame(frame, height=10).grid(row=5, column=4, columnspan=7)

        # 按钮,事件监听函数为calculate
        Button(frame, width=19, text="等额本息", command=self.calculate_1).grid(row=6, column=4, columnspan=1, pady=0)
        Button(frame, width=19, text="等额本金", command=self.calculate_2).grid(row=6, column=6, columnspan=1, pady=0)

        # 消息循环
        window.mainloop()

    # 按钮点击监听
    def calculate_1(self):
        """
        等额本息法计算函数
        """
        # 获取输入的参数
        amount = eval(self.amountVar.get())
        rate = eval(self.rateVar.get()) / 100 / 12  # 将年化利率转为月利率,单位为1
        years = eval(self.yearsVar.get())
        months = eval(self.monthsVar.get())
        month = eval(self.monthVar.get())

        # 计算每月还款
        monthRepayment = amount * rate * ((1 + rate ) ** (years * 12)) / ((1 + rate ) ** (years * 12) - 1)

        # 将计算结果设置给控件
        total = monthRepayment * 12 * years  # 总还款金额
        self.total_1Var.set(format(total, ".3f"))

        totalInterest = total - amount  # 总利息
        self.totalInterest_1Var.set(format(totalInterest, '.3f'))

        if (months >= 0) and (months <= years * 12):  # 已还期数必须在贷款期数内
            totalRepayment = monthRepayment * months  # 已还金额
            remain = total - totalRepayment  # 剩余待还金额
            self.totalRepayment_1Var.set(format(totalRepayment, '.3f'))
            self.remain_1Var.set(format(remain, '.3f'))
        else:
            self.totalRepayment_1Var.set('已还期数输入有误!')
            self.remain_1Var.set('已还期数输入有误!')

        if (month >= 1) and (month <= years * 12):
            self.monthRepayment_1Var.set(format(monthRepayment, '.3f'))
        else:
            self.monthRepayment_1Var.set('第_月份输入有误!')

    def calculate_2(self):
        """
        等额本金法计算函数
        """
        # 获取输入的参数
        amount = eval(self.amountVar.get())
        rate = eval(self.rateVar.get()) / 100 / 12  # 将年化利率转为月利率,单位为1
        years = eval(self.yearsVar.get())
        months = eval(self.monthsVar.get())
        month = eval(self.monthVar.get())
        month_amount = amount / (years * 12)

        # 存储每月还款
        monthRepayment = []
        for i in range(1, (years * 12) + 1):
            monthpayment = month_amount + (amount - (i - 1) * month_amount) * rate
            monthRepayment.append(monthpayment)

        # 将计算结果设置给控件
        total = sum(monthRepayment)
        self.total_2Var.set(format(total, ".3f"))

        totalInterest = total - amount
        self.totalInterest_2Var.set(format(totalInterest, '.3f'))

        if (months >= 0) and (months <= years * 12):
            totalRepayment = sum(monthRepayment[:months])
            remain = total - totalRepayment
            self.totalRepayment_2Var.set(format(totalRepayment, '.3f'))
            self.remain_2Var.set(format(remain, '.3f'))
        else:
            self.totalRepayment_2Var.set('已还期数输入有误!')
            self.remain_2Var.set('已还期数输入有误!')

        if (month >= 1) and (month <= years * 12):
            self.monthRepayment_2Var.set(format(monthRepayment[month - 1], '.3f'))
        else:
            self.monthRepayment_2Var.set('第_月份输入有误!')


if __name__ == '__main__':
    Calculator()
    pass

3、租房计算

# 定义租金、水电煤气费、房屋维护费和其他费用的变量
rent = 3000  # 每月租金
utilities = 400  # 每月水电煤气费
maintenance = 50  # 每月房屋维护费
other_expenses = 100  # 其他费用

# 定义租期和押金
lease_term = 12*20  # 租期(月) ,贷款时长
deposit = 5000  # 押金(月租金)

# 计算总支出
total_expenses = rent * lease_term + utilities * lease_term + maintenance * lease_term + other_expenses * lease_term + deposit

# 输出总支出
print("租房总支出为:", total_expenses)

租房总支出为: 857000
 

你可能感兴趣的:(python,thinter)