公积金自由还款计算程序 ( by quqi99 )

来源:互联网 发布:linux 程序开机自启动 编辑:程序博客网 时间:2024/06/10 06:05

                                              公积金自由还款计算器(by quqi99)


 

作者:张华 发表于:2010-07-29

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

 

 

package com.TripResearch;

import java.math.BigDecimal;

/**
 * 公积金自由还款计算器
 *
 * 还款的原则都是先还利息,后还本金。可以告诉您计算利息的方法。利息是按照您实际占压借款资金的时间来计算的。
 * 每一期计息都是以您的剩余本金数作为计息的基数,用这个基数乘以月利率(月利率就是贷款年利率÷12(月)),
 * 得出来的数额就是您当期应当偿还的利息数。由于您每一期的剩余本金数不一样,每一期支付的利息就不同。举个例子:
 * 20万20年,最低还款额为995元,假定月利率为3.825‰。首期还款如果是按最低还款额还款,
 * 其中利息部分金额为20万元×月利率(3.825‰))=765元,偿还本金部分为230元;第二期如果还是按照最低还款额还,
 * 则利息部分为(20万元-230元)×月利率(3.825‰))=764.12元,偿还本金为230.88元;以后各期以此类推,
 * 您可以通过网站右侧公积金贷款计算器自行推算。
 * @author: huazhang
 * @since:  2010-7-19
 */

public class Test
{
    private static final int DEF_DIV_SCALE = 10;

    public static double add(double v1, double v2)
    {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.add(b2).doubleValue();
    }

    public static double sub(double v1, double v2)
    {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.subtract(b2).doubleValue();
    }

    public static double mul(double v1, double v2)
    {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.multiply(b2).doubleValue();
    }

    public static double div(double v1, double v2)
    {
        return div(v1, v2, DEF_DIV_SCALE);
    }

    public static double div(double v1, double v2, int scale)
    {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
   
    public static double round(double v, int scale)
    {
        BigDecimal b = new BigDecimal(Double.toString(v));
        BigDecimal one = new BigDecimal("1");
        return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
   

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        double monthlyPayment = 4000;  //月还款额
       
        double totalLoan = 800000;     //货款总额,80万
        double monthlyRate = 0.00323;   //月利率,年利率3.87%除以12=0.00323
       
        int issueNum = 1;              //期数
        double payedCapitalTotals = 0; //已偿还本金总数
        double payedInterests = 0;     //已偿还利息总数
       
        System.out.println("期数   本期偿还本金   累计偿还本金   本期偿还利息   累计偿还利息");
        while(payedCapitalTotals <= totalLoan){
            double remianCapitals = sub(totalLoan, payedCapitalTotals);   //剩余本金数
            double interest = mul(remianCapitals, monthlyRate);           //本期偿还的利息
            double payedCapital = sub(monthlyPayment,interest);           //本期偿还的本金
            payedInterests += interest;
            payedCapitalTotals += payedCapital;
            System.out.println(issueNum + "   " + round(payedCapital,2) + "   " + round(payedCapitalTotals,2) + "   " + round(interest,2) + "   " + round(payedInterests,2));
            issueNum ++ ;
        }
        System.out.println("共" + round(div(issueNum,12),2) + "年还完,共偿还" + round(add(totalLoan,payedInterests),2) + "元");
    }
}

原创粉丝点击