用Dojo实现的公积金贷款计算程序
2012-01-11 16:05
459 查看
最近在想了解一下公积金贷款的最新政策,在网上搜了半天,还是没搞明白贷款的算法。最后干脆上官网访问公积金计算器程序,活生生把算法的JavaScript扒拉下来,发现算法还蛮复杂的,绕来绕去的。
最近刚刚接触Dojo,因此将该计算器程序用Dojo做了一个极其简陋的实现
首先在Head部分加入如下代码,用于加载Dojo的相关资源:
下面的代码用于初始化Dojo的Widget:
关于PieChart的代码:
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;//住房公积金贷款额度a var gjjdkb;//住房公积金贷款额度b var gjjdkc;//住房公积金贷款额度c gryjce=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; //计算2 zgdk=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 xujianfei var 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"> <script src="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(); }
相关文章推荐
- 计算房贷 公积金贷款 自由还款 程序
- 网页中实现一个计算当年还剩多少时间的倒数计时程序,要求网页上实时动态显示"××年还剩××天××时××分××秒"
- 编写一个程序,实现设置上月、本月电表读数,显示上月、本月电表读数,计算并显示本月用电数。
- 编写一个程序,实现设置上月、本月电表读数,显示上月、本月电表读数,计算并显示本月用电数。假设每度电的价格为1.2元,计算并显示本月电费。
- 第三周作业-实现随机点名的签到程序和计算闰年的简单程序
- C++:实现计算贷款支付额问题
- C++实现计算程序运行时间 高精度
- 网页中实现一个计算当年还剩多少时间的倒数计时程序,要求网页上实时动态显示“××年还剩××天××时××分××秒”
- 贷款计算公式——java实现
- 编写一个程序,实现设置上月、本月电表读数,显示上月、本月电表读数,计算并显示本月用电数。假设每度电的价格为1.2元,计算并显示本月电费。
- C++实现计算程序运行时间 高精度
- 编写一个程序,实现设置上月、本月电表读数,显示上月、本月电表读数,计算并显示本月用电数。 假设每度电的价格为1.2元,计算并显示本月电费
- 通过MapReduce程序来实现计算学生平均成绩
- [python]使用python实现Hadoop MapReduce程序:计算一组数据的均值和方差
- MFC中双缓存机制的使用和实现,程序运行时间计算
- php 计算程序运行时间的类,以及用它和Curl结合Host,实现不用配置Host得到该测试机的访问速度。
- C++高精度实现计算程序运行时间
- 题目: 编写一个程序,实现设置上月、本月电表读数,显示上月ji本月电表读数,计算并显示本月用电数。假设每度电的价格为1.2元,计算并显示本月电费。
- Linux/Unix 环境下实现精确计算程序运行的时间
- 编写一个程序,实现设置上月、本月电表读数,显示上月、本月电表读数,计算并显示本月用电数, 假设每度电的价格为1.2元,计算并显示本月电费。