美文网首页
提前还款合不合适

提前还款合不合适

作者: 哈比猪 | 来源:发表于2016-10-21 14:56 被阅读0次

    计算代码

    class Solution {
    public:
        int getSum(int a, int b) {
            double base = 2200000;//2160269.31;
            double ratio = 0.04165;
            int totalMonths = 360;
            double monthlyPayout = base * (ratio/12) * pow((1 + ratio/12), totalMonths) / (pow((1 + ratio/12), totalMonths) - 1);
            double totalPayout = monthlyPayout * totalMonths;
            //cout << monthlyPayout <<endl;
            
            int monthIndex = 1;
            // 在第indexByAdvance个月决定还款
            int indexByAdvance = 24;
            
            bool flag = false;
            
            // 提前还款的额度
            double x = 200000;
            // 假设当前投资别的东西年收益率
            double ratioByInvest = 0.045;
            
            // 不提前还款,到第monthIndex个月为止的总利息
            double sumInterest = 0;
            
            // 不提前还款,到第monthIndex个月为止的剩余本金
            double leftBase = base;
            
            // 不提前还款剩余的总利息总和
            double leftInterest = monthlyPayout*totalMonths - base;
            
            // 提前还款剩余的总利息总和
            
            // 提前还款(设在第K个月提前还款x元,K<monthIndex),到第monthIndex个月为止的总利息
            double sumInterestByAdvance = 0;
            
            // 提前还款(设在第K个月提前还款x元,K<monthIndex),到第monthIndex个月为止的剩余本金
            double leftBaseByAdvance = base;
            
            // x元做投资的总回报
            double paybackByInvest = 0;
            
            
            
            while(monthIndex <= totalMonths && leftBaseByAdvance >=0) {
                /*
                  计算到第monthIndex个月为止的总支出(查看剩余本金和已经支出的利息):
                  1. 假设不提前还款
                  (1)到第monthIndex个月为止的总利息 = monthlyPayout * monthIndex;
                  2. 在第K个月提前还款X元的总支出 = base - monthlyPayout * (monthIndex - k) - ()
                */
                
                if (monthIndex == indexByAdvance) {
                    leftBaseByAdvance = leftBaseByAdvance - x;
                }
                
                if (monthIndex >= indexByAdvance) {
                    double cInterest = leftBaseByAdvance * (ratio/12);
                    double cBase = monthlyPayout - cInterest;
                    leftBaseByAdvance = leftBaseByAdvance - cBase;
                    sumInterestByAdvance = sumInterestByAdvance + cInterest;
                    flag = true;
                    
                    // 假设拿x元做投资的回报金额是:
                    paybackByInvest = paybackByInvest + (x+paybackByInvest)*(ratioByInvest/12);
                    //cout<<"monthIndex: "<<monthIndex<<", paybackByInvest: "<<paybackByInvest<<endl;
                }
                
                double curInterest = leftBase * (ratio/12);
                double curBase = monthlyPayout - curInterest;
                leftBase = leftBase - curBase;
                sumInterest = sumInterest + curInterest;
                
                if (!flag) {
                    sumInterestByAdvance = sumInterest;
                    leftBaseByAdvance = leftBase;
                }
                
                
                
                // 作对比
                
                /*
                if ((totalPayout -base - sumInterest - paybackByInvest) > (monthlyPayout*333+x - base - sumInterestByAdvance) && (monthIndex >= indexByAdvance) ) {
                    cout<<"提前还款在第"<<monthIndex<<"个月开始奏效"<<endl;
                }*/
                
                if ((sumInterest-paybackByInvest) > sumInterestByAdvance) {
                    cout<<"提前还款在第"<<monthIndex<<"个月开始奏效"<<endl;
                }
                
                //cout<<monthlyPayout<<endl;
                //cout<<sumInterest<<endl;
                //cout<<monthIndex<<":"<<leftBaseByAdvance<<":"<<sumInterestByAdvance<<endl;
                //cout<<monthIndex<<":"<<leftBase<<":"<<sumInterest<<endl;
                cout<<"monthIndex: "<<monthIndex<<", sumInterest: "<<sumInterest - paybackByInvest<<", sumInterestByAdvance: "<<sumInterestByAdvance<<endl;
                
                //cout<<"monthIndex: "<<monthIndex<<", paybackByInvest: "<<paybackByInvest<<", leftInterest: "<<totalPayout -base - sumInterest - paybackByInvest<<",leftBase: "<<leftBase<<", leftInterestInAdvance:"<<monthlyPayout*333+x - base - sumInterestByAdvance<<", leftBaseInAdvance: "<<leftBaseByAdvance<<endl;
                
                monthIndex++;
                //cout<<monthIndex<<endl;
                
            }
            
            return 1;
        }
    };
    

    结论

    似乎只要是投资利率高于还款利率就不亏。

    相关文章

      网友评论

          本文标题:提前还款合不合适

          本文链接:https://www.haomeiwen.com/subject/foqcuttx.html