首页 > 其他分享 >买房攻略

买房攻略

时间:2024-03-15 17:04:42浏览次数:11  
标签:scanner double 买房 private 公积金 static 攻略 贷款

如果我贷款买一套 400W 的房子,我要给银行多送几辆迈巴赫?

2023 年至今,上海房价一跌再跌。俺已经蠢蠢欲动了,磨刀霍霍向"买房"。但是奈何手里钞票不够,只能向天再借 500 年打工赚钱。但是作为倔强的互联网打工人,想知道自己会被银行割多少韭菜。于是就写了个程序,用于计算我贷款买房需要多给银行还多少钱。这样我就能知道银行割我的韭菜,能省下几辆迈巴赫的钱了。


贷款利率

  • 公积金的贷款利率
    • 首房:贷款时间 <=5 年,利率为 2.6%;贷款时间 >= 5 年,利率为 3.1%
    • 非首房:贷款时间 <=5 年,利率为 3.025%;贷款时间 >= 5 年,利率为 3.575%

image

  • 商业险贷款利率

    • 贷款时间 <=5 年,利率为 3.45%;贷款时间 >= 5 年,利率为 3.95%

image


代码实现

  • 以下代码,实现了:我贷款买房需要多给银行还多少钱
public class LoanAmountCalculation {

    //首套住房5年以内公积金贷款利率
    private static final double FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_WITHIN_FIVE_YEARS = 2.6;
    //首套住房5年以上公积金款利率
    private static final double FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_MORE_FIVE_YEARS = 3.1;
    //二房5年以内公积金贷款利率
    private static final double NOT_FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_WITHIN_FIVE_YEARS = 3.025;
    //二房5年以上公积金款利率
    private static final double NOT_FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_MORE_FIVE_YEARS = 3.575;
    //5年以内商业贷款利率
    private static final double COMMERCIAL_LOAN_RATE_WITHIN_FIVE_YEARS = 3.45;
    //5年以上商业贷款利率
    private static final double COMMERCIAL_LOAN_RATE_MORE_FIVE_YEARS = 3.95;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        double houseAmount = getInputValue(scanner, "请输入预计买房金额(单位:W):", "请输出正确的买房金额(>0)!");
        double principal = getInputValue(scanner, "请输入您的本金(单位:W):", "请输出正确的买房金额(>0)!");
        if (principal >= houseAmount) {
            System.out.println("全款买房,崇拜大佬!");
            return;
        }

        double accumulationFundLoanAmount = getInputValue(scanner, "请输入公积金贷款金额(单位:W):", "请输出正确的公积金贷款金额(>0)!");

        double commercialLoanAmount = houseAmount - principal - accumulationFundLoanAmount;
        if(commercialLoanAmount <= 0){
            System.out.println("您的本金+公积金贷款已经够买房啦,恭喜大佬!");
            return;
        }else{
            System.out.println("您的本金+公积金贷款还不够买房哦,需要商业贷款金额为(单位:W):" + commercialLoanAmount + "\n");
        }

        int accumulationFundLoanYears = getInputIntValue(scanner, "请输入公积金贷款年份(单位:年):");
        int commercialLoanAmountYears = getInputIntValue(scanner, "请输入商业贷款年份(单位:年):");

        int isFirstHouse = getInputIntValue(scanner, "请输入是否首房(0:否,1:是):");

        LoanAmount loanAmount = calculateLoanAmount(
                accumulationFundLoanAmount, accumulationFundLoanYears,
                commercialLoanAmount, commercialLoanAmountYears, isFirstHouse);
        System.out.println("详细贷款信息如下:" + "\n" + loanAmount);
    }

    /**
     * 获取double类型的输入
     * @param scanner:Java输入类
     * @param prompt:提示信息
     * @param errorMessage:输入错误的提示信息
     * @return 一个double类型的输入
     */
    private static double getInputValue(Scanner scanner, String prompt, String errorMessage) {
        double value;
        while (true) {
            System.out.println(prompt);
            if (scanner.hasNextDouble()) {
                value = scanner.nextDouble();
                if (value > 0) {
                    break;
                } else {
                    System.out.println(errorMessage);
                }
            } else {
                scanner.next();
                System.out.println(errorMessage);
            }
        }
        return value;
    }

    /**
     * 获取int类型的输入
     * @param scanner:Java输入类
     * @param prompt:提示信息
     * @return 一个int类型的输入
     */
    private static int getInputIntValue(Scanner scanner, String prompt) {
        int value;
        while (true) {
            System.out.println(prompt);
            if (scanner.hasNextInt()) {
                value = scanner.nextInt();
                if (value > 0) {
                    break;
                } else {
                    System.out.println("请输入正确的年份(>0)!");
                }
            } else {
                scanner.next();
                System.out.println("请输入正确的年份(>0)!");
            }
        }
        return value;
    }

    /**
     * 功能:贷款金额计算
     * 入参:
     * 1.accumulationFundLoanAmount:公积金贷款金额  2.accumulationFundLoanYears:公积金贷款年份;
     * 3.commercialLoanAmount:商业贷款金额;        4.commercialLoanAmountYears:商业贷款年份
     * 5.isFirstHouse:是否首房
     */
    private static LoanAmount calculateLoanAmount(double accumulationFundLoanAmount, int accumulationFundLoanYears,
                                                           double commercialLoanAmount, int commercialLoanAmountYears, int isFirstHouse){
        LoanAmount loanAmount = new LoanAmount();
        //公积金贷款还款金额
        double accumulationFundRepaymentAmount;
        if(isFirstHouse == 1){
            accumulationFundRepaymentAmount = accumulationFundLoanYears <= 5 ?
                    accumulationFundLoanAmount * Math.pow((100 + FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_WITHIN_FIVE_YEARS) / 100, accumulationFundLoanYears)
                    : accumulationFundLoanAmount * Math.pow((100 + FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_MORE_FIVE_YEARS) / 100, accumulationFundLoanYears);
        }else{
            accumulationFundRepaymentAmount = accumulationFundLoanYears <= 5 ?
                    accumulationFundLoanAmount * Math.pow((100 + NOT_FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_WITHIN_FIVE_YEARS) / 100, accumulationFundLoanYears)
                    : accumulationFundLoanAmount * Math.pow((100 + NOT_FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_MORE_FIVE_YEARS) / 100, accumulationFundLoanYears);
        }
        loanAmount.setAccumulationFundRepaymentAmount(String.format("%.2f", accumulationFundRepaymentAmount));

        //公积金贷款每年还款金额
        loanAmount.setAccumulationFundAnnualRepaymentAmount(String.format("%.2f", accumulationFundRepaymentAmount / accumulationFundLoanYears));

        //商业贷款还款金额
        double commercialRepaymentAmount = commercialLoanAmountYears <= 5 ?
                commercialLoanAmount * Math.pow((100 + COMMERCIAL_LOAN_RATE_WITHIN_FIVE_YEARS) / 100, commercialLoanAmountYears)
                : commercialLoanAmount * Math.pow((100 + COMMERCIAL_LOAN_RATE_MORE_FIVE_YEARS) / 100, commercialLoanAmountYears);
        loanAmount.setCommercialRepaymentAmount(String.format("%.2f", commercialRepaymentAmount));

        //商业贷款每年还款金额
        loanAmount.setCommercialAnnualRepaymentAmount(String.format("%.2f", commercialRepaymentAmount / commercialLoanAmountYears));

        //公积金贷款超出金额
        loanAmount.setAccumulationFundLoanExceedAmount(String.format("%.2f", accumulationFundRepaymentAmount - accumulationFundLoanAmount));

        //商业贷款超出金额
        loanAmount.setCommercialLoanExceedAmount(String.format("%.2f", commercialRepaymentAmount - commercialLoanAmount));

        loanAmount.setTotalExceedLoanAmount(String.format("%.2f", accumulationFundRepaymentAmount - accumulationFundLoanAmount + commercialRepaymentAmount - commercialLoanAmount));
        return loanAmount;
    }
    @Data
    static class LoanAmount{
        /**
         * 公积金贷款还款金额
         */
        private String accumulationFundRepaymentAmount;
        /**
         * 公积金贷款每年还款金额
         */
        private String accumulationFundAnnualRepaymentAmount;
        /**
         * 商业贷款还款金额
         */
        private String commercialRepaymentAmount;
        /**
         * 商业贷款每年还款金额
         */
        private String commercialAnnualRepaymentAmount;
        /**
         * 公积金贷款超出金额 = 公积金贷款还款金额 - 公积金贷款金额
         */
        private String accumulationFundLoanExceedAmount;
        /**
         * 商业贷款超出金额 = 商业贷款还款金额 - 商业贷款金额
         */
        private String commercialLoanExceedAmount;

        /**
         * 总共贷款超出金额
         */
        private String totalExceedLoanAmount;

        @Override
        public String toString() {
            return "1.公积金贷款还款金额=" + accumulationFundRepaymentAmount + "万元\n" +
                    "2.商业贷款还款金额=" + commercialRepaymentAmount + "万元\n" +
                    "3.公积金贷款每年还款金额=" + accumulationFundAnnualRepaymentAmount + "万元\n" +
                    "4.商业贷款每年还款金额=" + commercialAnnualRepaymentAmount + "万元\n" +
                    "5.公积金贷款超出金额=" + accumulationFundLoanExceedAmount + "万元\n" +
                    "6.商业贷款超出金额=" + commercialLoanExceedAmount + "万元\n" +
                    "7.总共贷款超出金额=" + totalExceedLoanAmount + "万元\n";
        }
    }
}
  • 代码输入,输出示例:

image

由上图可知,我要贷款买一套 400w 的房子,本金只有 120w,使用组合贷:公积金贷款 120w(10年),商业贷款 160w(20年)。最终我需要多还银行 230.07w,相当于买两辆迈巴赫的钱了,巨亏!


以上就是全部内容了,如果涉及到真实场景,还是需要根据具体的情况计算的!

标签:scanner,double,买房,private,公积金,static,攻略,贷款
From: https://www.cnblogs.com/zp123yyds/p/18075794

相关文章

  • 考研模拟面试-题目【攻略】
    考研模拟面试-题目【攻略】前言版权推荐考研模拟面试-题目前面的问题通用问题专业题数据结构计算机网络操作系统数据库网络安全手写题数据结构操作系统计算机网络代码题基础代码题其他代码题后面的问题补充题目最后前言2023-10-1912:00:57以下内容源自《考研模......
  • 拒绝被忽悠 买房看清开发商6个套路!
    想必买过房子的人都知道烂尾房以及五证不全的房子的危害吧?除此以外,还有部分小开发商的房子,户型做的不好不说,就连房屋质量都没法保证。因此想要明明白白买房,认清开发商的套路是很重要的!一、了解开发商实力购房者想了解开发商的实力可以通过当地专业的网站关键字搜索、专业刊物进......
  • 水下蓝牙耳机哪个好?小白入手游泳耳机的最强参考攻略!
    在现代社会,科技的发展为我们的生活带来了许多便利。其中,蓝牙技术的出现,使得我们可以摆脱线缆的束缚,享受音乐、通话等多媒体体验。(以下是之前测试过的游泳耳机)特别是在运动时,一款好的防水蓝牙耳机不仅可以帮助我们更好地享受音乐,还可以保证我们的安全。那么,水下蓝牙耳机哪个......
  • 买房掌握这9大妙招 认清开发商的套路!
    相对于开发商来说,购房者往往属于弱势群体。由于很多购房者缺乏对房产知识以及法律知识的了解,很容易被开发商所“忽悠”。更有甚者发生纠纷时,购房者不知如何处理,导致自己的合法权益受到损害。那么想要明明白白买房,认清开发商的套路需要掌握哪些知识一、看五证了解开发商实力鉴别......
  • 毕业论文攻略:快速完成,轻松毕业!
    制定计划,合理分阶段......
  • 【教程】APP备案全攻略:确保你的应用合规上线
    摘要本文详细介绍了中国大陆地区互联网信息服务提供者(AP)进行APP备案的流程、要求和注意事项。包括备案对象、备案方式、备案内容、备案流程等方面的详细说明,帮助开发者顺利完成APP备案手续。引言随着移动应用市场的不断扩大,APP备案成为应用上线的必要步骤。本文将针对如何进行A......
  • 项目进度报告撰写全攻略
    本文将探讨如何将进度报告写作整合到你的工作流程中,包括确定最适合的报告时间、编写方法和与团队一起构建报告结构的建议。最后,还会分享一些撰写进度报告的最佳做法,助你掌握这种对工作有巨大帮助的方法。什么是进度报告?它是一种用来告知别人某个项目或任务当前状态的商业文档......
  • Alfred5配置攻略
    目录下载安装包快捷键常用自带快捷键关键字常用自带KeyWord操作系统配置操作自定义工作流KeyWord配置快速打开运行特定软件浏览器方面参考网址 Alfred是一款屡获殊荣的macOS应用程序,可通过热键、关键字、文本扩展等功能提高您的效率。搜索您的Mac和网页,并通过自定义操作来控......
  • Salesforce【初级开发】认证备考攻略来袭!
    PlatformDeveloperI认证考试是面向Salesforce平台工作者的基础考试。如果你想成为Salesforce开发人员,这是一项关键考试。而且通过准备此考试获得的知识框架对所有角色都有好处,包括管理员、架构师、业务分析师、产品所有者和项目经理。 初级开发考试指南指出,备考者最好有1到2......
  • 这份攻略帮助你分分钟构建出“幻兽帕鲁游戏”极致体验
    春节前夕,一款名为《幻兽帕鲁(Palworld)》的游戏火爆出圈,在数天之内销量达到数百万,半月之内玩家达到了数千万之多。为了提升用户的体验,国内云厂商,诸如阿里云、华为云、腾讯云等纷纷推出幻兽帕鲁服务器,玩家可以在分钟级别内快速构建出开箱即用的幻兽帕鲁服务器。对于快速构建云服务......