第十二週 沈育萍 教你金融計算

躉繳第1期第2期第3期第4期

注意,包含首期躉繳的現金流量都大於0。

報酬率:

淨現值:

迴圈次數:

沈育萍向劉任昌學習的程式碼

<style>
.pmt{
width: 80px; /*寬度*/
height: 20px; /*高度*/
background-color: skyblue; /*背景顏色*/
color: white; /*字體顏色*/
text-align: right; /*文字對齊*/
  }
.qmt{
width: 100%; /*寬度*/
height: 100%; /*高度*/
        border: 20px outset skyblue;  /*邊框*/
background-color: yellow; /*背景顏色*/
color: blue; /*字體顏色*/
text-align: center; /*文字對齊*/
  }
</style>
<table border=1>
  <tr align=center><td>躉繳</td><td>第1期</td><td>第2期</td><td>第3期</td><td>第4期</td></tr>
<tr><td><input type="number" class="pmt"></td>
<td><input type="number" class="pmt"></td>
<td><input type="number" class="pmt"></td>
<td><input type="number" class="pmt"></td>
<td><input type="number" class="pmt"></td></tr>
</table><br>
注意,包含首期躉繳的現金流量都大於0。
<p><input type="button" value="計算內部報酬率" onclick="IRR()"></p> <!-- 按下 button 去執行 JavaScript IRR( )-->
<p>報酬率: <b id="irr" class="pmt"></b></p>
<p>淨現值: <b id="npv" class="pmt"></b></p>
<p>迴圈次數: <b id="loopNumber" class="pmt"></b></p>

<script>
const period = 5;
const maxerror = 0.000001;
var payment = new Array(period);
function IRR(){
  var a = 0;
  var b = 1;
  var c;
  var f;
  var gap=10;
  var loopNumber = 0;
  for ( var i = 0; i < period ; i++ )
    payment[i]=document.getElementsByClassName("pmt")[i].value;
  f = npv(a);
  if ( f == 0 )
    document.getElementById("irr").innerHTML = "內部報酬率 = 0 ";
  else if ( f < 0 )
    document.getElementById("irr").innerHTML = "內部報酬率 < 0 ";
  else{
    while ( gap > maxerror && Math.abs(f) > maxerror && loopNumber < 100 ){
      loopNumber++;
      c = ( a + b ) / 2;
      f = npv(c);
      if ( Math.abs(f) > maxerror && gap > maxerror){
        if ( f > 0 )
        a = c;
       else
        b = c;
       gap = b - a;
}
}  //迴圈while結束
}
  document.getElementById("irr").innerHTML= c;
  document.getElementById("npv").innerHTML= f;
  document.getElementById("loopNumber").innerHTML = loopNumber;
}
var npv = function(rate){  
var y = - payment[0];
for (var j = 1; j < period ; j++)
      y = y + payment[j]/(1 + rate ) ** j;
return y;
  }
</script>
<h1 class="qmt">沈育萍向劉任昌學習的程式碼</h1>

留言

這個網誌中的熱門文章

沈育萍 Excel 【資料→從Web取得外部資料→自動更新】(04/08)