18 May

การใช้ javascript ทำโปรแกรมคิดดอกเบี้ยแบบลดต้นลดดอก

หลายคนกู้บ้านกับธนาคารนั้น ธนาคารจะมีการคิดอัตราดอกเบี้ยบแบบลดต้นลดดอก ซึ่งจะมีโปรแกรมคำนวณ ว่าต้องจ่ายเดือนละเท่าไหร่ เป็นเงินต้นเท่าไหร่ ดอกเบี้ยเท่าไหร่ ซึ่งวันนี้ในฐานะคนที่ทำเว็บและก็กูธนาคารด้วยเลยคิดทำมาเล่นๆดู เป็นการฝึกทักษะการเขียนโปรแกรมไปในตัว

ก่อนอื่นเราต้องรู้ก่อนครับว่าอัตราแบบลดต้นลดดอกนั้นมีวิธีการคิดอย่างไร

ผมไปเจอในเว็บ  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;
}
   

โปรแกรมนี้เป็นการคำนวณคร่าวๆนะครับเอาไว้ดูก่อนตัดสินใจกู้หรือใช้ฝึกเขียนโปรแกรมจะดีกว่า ต้องให้ทางธนาคารคำนวณจะดีกว่าเพราะเรื่อง จำนวนวัน ในเดือนในปี ของแต่ละที่ไม่เหมือนกัน และอัตราดอกเบี้ยที่ขึ้นลงครับ

หากมีแนะนำหรือสงสัยสอบถามได้ครับ

ผิดพลาดอย่างไรแนะนำได้ครับ

SOURCE CODE

 

Wiwat says:

ผลแปลกๆ ตรงช่องดอกเบี้ยต้องใส่ต่อเดือนหรือป่าวครับ
ผมลองใส่ 6% มันคำนวณออกมาผิดจากความเป็นจริงมากเลย

supachet2526 says:

สงสัยการคำนวณผิดครับ

Leave a Reply

Your email address will not be published. Required fields are marked *