
หลายคนกู้บ้านกับธนาคารนั้น ธนาคารจะมีการคิดอัตราดอกเบี้ยบแบบลดต้นลดดอก ซึ่งจะมีโปรแกรมคำนวณ ว่าต้องจ่ายเดือนละเท่าไหร่ เป็นเงินต้นเท่าไหร่ ดอกเบี้ยเท่าไหร่ ซึ่งวันนี้ในฐานะคนที่ทำเว็บและก็กูธนาคารด้วยเลยคิดทำมาเล่นๆดู เป็นการฝึกทักษะการเขียนโปรแกรมไปในตัว
ก่อนอื่นเราต้องรู้ก่อนครับว่าอัตราแบบลดต้นลดดอกนั้นมีวิธีการคิดอย่างไร
ผมไปเจอในเว็บ 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% มันคำนวณออกมาผิดจากความเป็นจริงมากเลย
สงสัยการคำนวณผิดครับ