หลายคนกู้บ้านกับธนาคารนั้น ธนาคารจะมีการคิดอัตราดอกเบี้ยบแบบลดต้นลดดอก ซึ่งจะมีโปรแกรมคำนวณ ว่าต้องจ่ายเดือนละเท่าไหร่ เป็นเงินต้นเท่าไหร่ ดอกเบี้ยเท่าไหร่ ซึ่งวันนี้ในฐานะคนที่ทำเว็บและก็กูธนาคารด้วยเลยคิดทำมาเล่นๆดู เป็นการฝึกทักษะการเขียนโปรแกรมไปในตัว
ก่อนอื่นเราต้องรู้ก่อนครับว่าอัตราแบบลดต้นลดดอกนั้นมีวิธีการคิดอย่างไร
ผมไปเจอในเว็บ https://www.1213.or.th/th/serviceunderbot/loans/Pages/effectiverate.aspx เขาให้ สูตรและข้อมูลค่อนข้างดีครับ
หลังจากเข้าใจวิธีการคิดแล้วเรามาดูตัวอย่างที่ทำกันครับ
โดย input หลักของเราจะมีอยู่ 3 ตัวคือ
1 เงินต้น
2 อัตราดอกเบี้ยต่อปี
3 ระยะเวลาในการผ่อนใส่เป็นเดือน
ซึ่งผมจะอธิบายไว้ใน CODE COMMENT ของ JAVASCRIPT
$(".cal").click( function (){ // เมื่อมีการ click ปุ่มคำนวณ class cal cal_i() ; // ทำการเรียก function cal_i } ); function cal_i(){ var amout = $(".amout").val(); // ดึงข้อมูลจากเงินต้น จาก input class amout var interest = $(".rate").val(); // ดึงข้อมูลอัตราดอกเบี้ยต่อปี จาก input class rate var monthtopay = $(".month").val(); // ดึงข้อมูลระยะเวลาการผ่อน จาก input class month // เช็คข้อมูลว่าเป็น number หรือเปล่า จริงๆตรงนี้ถ้าจะใช้งานจริงจังต้อง validate มากกว่านี้ หรือทำ ui ให้ดีกว่านี้ if( isNaN(amout) || isNaN(interest) || isNaN(monthtopay) ){ alert("Not number"); return false; } var dateofmonth = 30; // จำนวณวันแต่ละเดือน จากเรื่องที่ไปศึกษามา พวกนี้ขึ้นอยู่กับ bank ว่าจะใช้ rate ไหน var dayofyear = 360; // จำนวณวันในแต่ละปี var i = 1; // เอาไว้นับจำนวน var outputtable = ""; // ตัวแปลไว้ใส่ html แสดงผล var sum_interest = 0; // ตัวแปลรวมดอกเบี้ยทั้งหมด var pmttocount = PMT( (interest/12), monthtopay ,-amout ) ; // PMT เป็นสูตรคำนวณหาค่าการจ่ายเงินให้เท่ากันทุกงวดว่าต้องจ่ายงวดละเท่าไหร่ while(amout > 0) { // loop เพื่อคำนวณ จำกว่าต้นจะหมด var tem_interest = (amout * interest * dateofmonth) / dayofyear; // ดอกเบี้ย var amout_d = pmttocount - tem_interest; // ต้น sum_interest += tem_interest; //เก็บเข้าตัวแปรรวมดอกเบี้ย amout = amout-amout_d; // เงินต้นถูกลบด้วย เงินที่จ่ายไป หักด้วย ดอกเบี้ย if(amout<0){ // ในกรณี้ที่ amout ต่ำกว่า 0 จะป็นงวดสุดทาย pmttocount = pmttocount + (amout); amout_d = pmttocount - tem_interest; amout = amout - amout; } // นำข้อมูลที่ได้มาใส่ในตัวแปล outputtable เพื่อใช้ในการแสดงดาราง outputtable += "<tr>"; outputtable += "<td>"+i+"</td>"; outputtable += "<td>"+pmttocount.toFixed(2)+"</td>"; outputtable += "<td>"+amout_d.toFixed(2)+"</td>"; outputtable += "<td>"+tem_interest.toFixed(2)+"</td>"; outputtable += "<td>"+amout.toFixed(2)+"</td>"; outputtable += "</tr>"; i++; } $(".output").html(outputtable); // แสดงผลตารา $(".sumout").html(sum_interest.toFixed(2)); // แสดงผลผลรวม $(".sum").show(); } // function PMT สูตรคำนวณหาค่าการจ่ายเงินให้เท่ากันทุกงวดว่าต้องจ่ายงวดละเท่าไหร่ อันนี้ทางผมไปเอาของต่างประเทศมา 555 function PMT(rate, nperiod, pv, fv, type) { if (!fv) fv = 0; if (!type) type = 0; if (rate == 0) return -(pv + fv)/nperiod; var pvif = Math.pow(1 + rate, nperiod); var pmt = rate / (pvif - 1) * -(pv * pvif + fv); if (type == 1) { pmt /= (1 + rate); }; return pmt; }
โปรแกรมนี้เป็นการคำนวณคร่าวๆนะครับเอาไว้ดูก่อนตัดสินใจกู้หรือใช้ฝึกเขียนโปรแกรมจะดีกว่า ต้องให้ทางธนาคารคำนวณจะดีกว่าเพราะเรื่อง จำนวนวัน ในเดือนในปี ของแต่ละที่ไม่เหมือนกัน และอัตราดอกเบี้ยที่ขึ้นลงครับ
หากมีแนะนำหรือสงสัยสอบถามได้ครับ
ผิดพลาดอย่างไรแนะนำได้ครับ
ผลแปลกๆ ตรงช่องดอกเบี้ยต้องใส่ต่อเดือนหรือป่าวครับ
ผมลองใส่ 6% มันคำนวณออกมาผิดจากความเป็นจริงมากเลย
สงสัยการคำนวณผิดครับ