function isNum(str) { /* ... determines whether the string 'str' is a number (i.e. contains only digits and .) */ for (var i = 0; i < str.length; i++) { var ch = str.substring(i, i + 1) if ((ch < "0" || "9" < ch) && ch != '.') { return false } } if ((str.length==0)) { return false } else { return true } } function FindPayment() { var discount=0 var tradein=0 var deposit=0 msg='' ppstring=document.calcPayment.amount.value if (!isNum(ppstring)) { msg+='Non-numeric or absent data in loan amount field\n' } aprstring=document.calcPayment.aprpcnt.value if (!isNum(aprstring)) { msg+='Non-numeric or absent data in APR field\n' } nstring=document.calcPayment.nmonths.value if (!isNum(nstring)) { msg+='Non-numeric or absent data in number of months field\n' } if (msg.length==0) { var pp=parseFloat(ppstring) var p=pp-discount-tradein-deposit var n=parseFloat(nstring) var apr=parseFloat(aprstring) var r=Math.pow((1+apr/100),1/12) if (apr>0) { rn=Math.pow(r,n) a=p*(1-r)*rn/(1-rn) } else { a=p/n } a=0.01*Math.round(a*100) totp=0.01*Math.round(a*n*100) interest=0.01*Math.round((totp-p)*100) interestpcnt=0.01*Math.round(interest/p*100*100) //alert("Monthly payment = "+a+"\nTotal payment = "+totp) document.calcPayment.mpayment.value=a document.calcPayment.trepaid.value=totp document.calcPayment.trepaidpcnt.value=interestpcnt } else { alert(msg) } } function FindAPR() { var deposit=0 var q=0 msg='' pstring=document.calcAPR.amount.value if (!isNum(pstring)) { msg+='Non-numeric or absent data in loan amount field\n' } paystring=document.calcAPR.mpayment.value if (!isNum(paystring)) { msg+='Non-numeric or absent data in payment field\n' } nstring=document.calcAPR.nmonths.value if (!isNum(nstring)) { msg+='Non-numeric or absent data in number of months field\n' } if (msg.length==0) { var p=parseFloat(pstring) var n=parseFloat(nstring) var a=parseFloat(paystring) r=1.01 pp=p-deposit rnew=0 while (Math.abs(r-rnew)>0.0000001) { var rn=Math.pow(r,n) rnm1=rn/r fac=(pp*rn-q)*(1-r)/(1-rn)-a facdash=(n*pp*rnm1*(1-r)-(pp*rn-q))/(1-rn)+(pp*rn-q)*(1-r)*n*rnm1/((1-rn)*(1-rn)) rnew=r-fac/facdash r=rnew } r12=Math.pow(r,12) apr=0.01*Math.round((r12-1)*100*100) document.calcAPR.aprpcnt.value=apr } else { alert(msg) } }