用Dojo实现的公积金贷款计算程序

来源:互联网 发布:uefi gpt ubuntu 安装 编辑:程序博客网 时间:2024/05/19 06:38

最近在想了解一下公积金贷款的最新政策,在网上搜了半天,还是没搞明白贷款的算法。最后干脆上官网访问公积金计算器程序,活生生把算法的JavaScript扒拉下来,发现算法还蛮复杂的,绕来绕去的。

function gjjloan2(obj){var gryjce;//住房公积金个人月缴存额var poyjce;//配偶住房公积金个人月缴存额var grjcbl;//缴存比例var pojcbl;//配偶缴存比例var xy; //个人信用var fwzj;//房屋总价var fwxz;//房屋性质var dknx;//贷款申请年限var syhk; //首月还款额var dked;//需要贷款额度var hkfs;//还款方式var bxhj; //本息合计var bxhj2; //本息合计等本金//中间变量var gbl;var jtysr; //家庭月收入var r;//月还款var rb;var gjjdka;//住房公积金贷款额度avar gjjdkb;//住房公积金贷款额度bvar gjjdkc;//住房公积金贷款额度cgryjce=obj.mount2.value;if(gryjce<=0){alert('住房公积金个人月缴存额不能为空,请输入.');obj.mount2.value='';obj.mount.focus();return;}poyjce=obj.mount3.value;/*if (obj.jcbl[0].checked==true){grjcbl=0.08;}else {grjcbl=0.1;}if (obj.p_bl[0].checked==true){pojcbl=0.08;}else {pojcbl=0.1;}*/grjcbl=obj.jcbl.value/100;pojcbl=obj.p_bl.value/100;if (obj.xz[0].checked==true){fwxz=0.9;}else {fwxz=0.8;}if (obj.xy[0].checked==true){xy=1.15;}else if(obj.xy[1].checked==true){xy=1.3;}else {xy=1;}fwzj=obj.mount.value;if(fwzj<=0){alert('房屋总价不能为空,请输入');obj.mount.value='';return;}dknx=Math.round(obj.mount10.value);//alert(dknx);if(dknx<=0){alert('贷款申请年限不能为空,请输入');obj.mount10.value='';return;}var bcv=0;if (dknx>5){if(obj.jtf[1].checked==true){bcv=Math.round( 1000000 * l6_30*1.1/12 ) / 1000000;}else{bcv=Math.round( 1000000 * l6_30/12 ) / 1000000;}}else{if (obj.jtf[1].checked==true){bcv=Math.round( 1000000 * l1_5*1.1/12 ) / 1000000;}else{bcv=Math.round( 1000000 * l1_5/12 ) / 1000000;}}r=adv_format((10000*bcv*Math.pow(1+bcv,12*dknx))/(Math.pow(1+bcv,12*dknx)-1),2);jtysr=Math.ceil((gryjce/grjcbl+poyjce/pojcbl)*10)/10;gjjdka=Math.min(Math.round((jtysr-400)/r*10000*10)/10,800000);gjjdkb=Math.round(gjjdka*xy*10)/10;gjjdkc=Math.round(fwzj*fwxz*10)/10;//obj.ze2.value=gjjdka; //jtysr;//obj.ze2.value=Math.floor(Math.min(gjjdkb,gjjdkc)/10000*10)/10;//计算2zgdk=obj.ze2.value; //最高贷款额度dked=Math.round(obj.need.value*10)/10;obj.need.value=dked;if(dked==0){alert('需要的贷款额度不能为空,请输入');obj.need.value='';return;}if(dked<0){alert('输入的贷款额度不符合要求,请输入');obj.need.value='';return;}if(dked>zgdk){alert('不能高于最高贷款额度,请重新输入');obj.need.value='';return;}hkfs=obj.select.value;if(hkfs==1){//obj.ze22.value=Math.ceil(dked*r*100)/100;//==============================modify by xujianfeivar ylv_new ;if(dknx>=1&&dknx<=5){if (obj.jtf[1].checked==true){ylv_new = l1_5*1.1/12;}else{ylv_new = l1_5/12;}}else{if (obj.jtf[1].checked==true){ylv_new = l6_30*1.1/12;}else{ylv_new = l6_30/12;}}var ncm = parseFloat(ylv_new) + 1;//n次幂var dknx_new = dknx*12;total_ncm = Math.pow(ncm, dknx_new)obj.ze22.value = Math.round(((dked*10000*ylv_new*total_ncm)/(total_ncm-1))*100)/100;var pp = Math.round(((dked*10000*ylv_new*total_ncm)/(total_ncm-1))*100)/100;//=========================================================gbl=Math.round(Math.ceil(dked*r*100)/100/jtysr*1000)/10;obj.yj2.value=gbl;//bxhj=Math.round(r*dked*dknx*12*100)/100;bxhj = Math.round(pp*dknx*12*100)/100;obj.lx2.value=bxhj;}if (hkfs==2){if (dknx>5){if (obj.jtf[1].checked==true){rb=l6_30*1.1*100;}else{rb=l6_30*100;}}else{if (obj.jtf[1].checked==true){rb=l1_5*1.1*100;}else{rb=l1_5*100;}}syhk=Math.round((dked*10000/(dknx*12)+dked*10000*rb/(100*12))*100)/100;obj.sfk2.value=syhk;var yhke; //月还款额var bxhj; //本息合计var dkys; //贷款月数var sydkze;//当前剩余贷款总额var yhkbj; //月还款本金dkys=dknx*12;yhkbj=dked*10000/dkys;yhke=syhk;sydkze=dked*10000-yhkbj;bxhj=syhk;for (var count=2;count<=dkys; ++count){//yhke=Math.round((dked*10000/(dknx*12)+sydkze*rb/(100*12))*100)/100;yhke=dked*10000/dkys+sydkze*rb/1200;sydkze-=yhkbj;bxhj+=yhke;}obj.lx3.value= Math.round(bxhj*100)/100;}if (hkfs==3){switch(dknx){//自由还款还款方式月最低还款额参照表,调整利率不修改case 1 : rb=83.04/100; break;case 2 : rb=81.08/100; break;case 3 : rb=79.12/100; break;case 4 : rb=77.16/100; break;case 5 : rb=75.20/100; break;case 6 : rb=73.24/100; break;case 7 : rb=71.28/100; break;case 8 : rb=69.32/100; break;case 9 : rb=67.36/100; break;case 10 : rb=65.40/100; break;case 11 : rb=63.44/100; break;case 12 : rb=61.48/100; break;case 13 : rb=59.52/100; break;case 14 : rb=57.56/100; break;case 15 : rb=55.60/100; break;case 16 : rb=53.64/100; break;case 17 : rb=51.68/100; break;case 18 : rb=49.72/100; break;case 19 : rb=47.76/100; break;case 20 : rb=45.80/100; break;case 21 : rb=43.84/100; break;case 22 : rb=41.88/100; break;case 23 : rb=39.92/100; break;case 24 : rb=37.96/100; break;case 25 : rb=36.00/100; break;case 26 : rb=34.04/100; break;case 27 : rb=32.08/100; break;case 28 : rb=30.12/100; break;case 29 : rb=28.16/100; break;case 30 : rb=26.20/100; break;}var yhke; //月还款额var ll;//利率var zhbj;//最后一期本金zhbj = Math.round(dked*10000*rb*100)/100;if (dknx<=5){if (obj.jtf[1].checked==true){ll=l1_5*1.1/12;}else{ll=l1_5/12;}zdhkll=0.0445/12;var total_gjj = Math.pow(zdhkll + 1, dknx*12);syhk=Math.ceil(dked*10000*zdhkll*total_gjj/(total_gjj-1));}else{if (obj.jtf[1].checked==true){ll=l6_30*1.1/12;}else{ll=l6_30/12;}zdhkll=0.0490/12;var total_gjj = Math.pow(zdhkll + 1, dknx*12-1);syhk=Math.ceil((dked*10000-zhbj)*zdhkll*total_gjj/(total_gjj-1)+zhbj*zdhkll);}obj.sfk3.value=syhk; //最低还款额var zhyqbj=dked*10000;var zchlx=0;//总偿还利息for (i=1;i<dknx*12 ;i++ ){zchlx+=Math.round(zhyqbj*ll*100)/100;zhyqbj=Math.round((zhyqbj-(syhk-Math.round(zhyqbj*ll*100)/100))*100)/100;}var sydkze=dked*10000-syhk;obj.lx4.value=zhyqbj; //最后期本金obj.lx5.value=Math.round(zhyqbj*ll*100)/100;/*for (i=1;i<dknx*12 ;i++ ){zchlx+=Math.round((dked*10000-(syhk-Math.round(dked*10000*ll*100)/100))*ll*100)/100;}*/zchlx+=Math.round(zhyqbj*ll*100)/100;obj.lx6.value=Math.round(zchlx*100)/100;}//计算申请的最高贷款额度/*说明家庭月收入=住房公积金个人月缴存额÷缴存比例+配偶住房公积金个人月缴存额÷缴存比例住房公积金贷款额度a=(家庭月收入-400)÷等额均还月还款额每万元月还款额,且不大于40万元对于个人信用等级为AAA的,住房公积金贷款额度b=住房公积金贷款额度a×130%对于个人信用等级为AA的,住房公积金贷款额度b=住房公积金贷款额度a×115%对于个人信用等级其它的,住房公积金贷款额度b=住房公积金贷款额度a对房屋性质为商品房期房的,住房公积金贷款额度c=房屋总价×90%对房屋性质为其它的,住房公积金贷款额度c=房屋总价×95%最高贷款额度d=min(b,c)等额均还还款公式:等额本金还款公式首月还款额=P/(n×12)+借款总额×I其中:P为贷款本金,I为月利率,n为贷款年限。 */}

最近刚刚接触Dojo,因此将该计算器程序用Dojo做了一个极其简陋的实现



首先在Head部分加入如下代码,用于加载Dojo的相关资源:

<link rel="stylesheet"href="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dijit/themes/claro/claro.css"><scriptsrc="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js"data-dojo-config="parseOnLoad: true">

下面的代码用于初始化Dojo的Widget:

dojo.ready(function() {var chart = new dojox.charting.Chart2D("piechart");var button = new dijit.form.Button({label : "开始计算",onClick : function() {gjjloan();var chartData = [parseInt(document.getElementById("lx4").value),parseInt(document.getElementById("lx5").value) ];console.log(chartData[0] + "---" + chartData[1]);createChart(chart,chartData);}}, "btn");var textbox = new dijit.form.TextBox({placeHolder : "Enter text here."}, "mount2");var textbox = new dijit.form.TextBox({placeHolder : "Enter text here."}, "jcbl");var textbox = new dijit.form.TextBox({placeHolder : "Enter text here."}, "mount3");var textbox = new dijit.form.TextBox({placeHolder : "Enter text here."}, "p_bl");var textbox = new dijit.form.TextBox({placeHolder : "Enter text here."}, "mount");var textbox = new dijit.form.TextBox({placeHolder : "Enter text here."}, "mount10");var textbox = new dijit.form.TextBox({placeHolder : "Enter text here."}, "need");var textbox = new dijit.form.TextBox({}, "sfk3");var textbox = new dijit.form.TextBox({}, "lx4");var textbox = new dijit.form.TextBox({}, "lx5");var textbox = new dijit.form.TextBox({}, "lx6");var foo = new dijit.form.ComboBox({value : "自由还款"}, "select");var radioZc = new dijit.form.RadioButton({value : "政策住房",name : "政策住房"}, "zc");var radioQt = new dijit.form.RadioButton({checked : true,value : "其他",name : "其他"}, "qt");var radioAAA = new dijit.form.RadioButton({checked : true,value : "AAA",name : "AAA"}, "aaa");var radioAA = new dijit.form.RadioButton({value : "AA",name : "AA"}, "aa");var radioOther = new dijit.form.RadioButton({value : "其他",name : "其他"}, "others");var radioOne = new dijit.form.RadioButton({checked : true,value : "第一套",name : "第一套"}, "first");var radioTwo = new dijit.form.RadioButton({value : "第二套",name : "第二套"}, "second");});

关于PieChart的代码:

function createChart(chart,chartData) {chart.setTheme(dojox.charting.themes.Claro);chart.addPlot("default", {type : "Pie",markers : true});chart.addAxis("x");chart.addAxis("y", {min : 800,max : 300000,vertical : true,fixLower : "major",fixUpper : "major"});chart.addSeries("Monthly Sales - 2010", chartData);var tip = new dojox.charting.action2d.Tooltip(chart, "default");var mag = new dojox.charting.action2d.MoveSlice(chart, "default");chart.render();}

原创粉丝点击