第11週梁皓雲HTML,CSS,JavaScript 金融計算

躉繳第1期第2期第3期

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

報酬率

淨現值

迴圈次數

<>

以下程式原始碼如下

<head>

<style>

.pmt {

width:80pt;

  height:20pt;

background-color: white;

color: black;

text-align: right;}

</style>

  </head>

<body>

<table border="1">

  <tr align="center"><td>躉繳</td><td>第1期</td><td>第2期</td><td>第3期</td></tr>

  <tr><td><input class="pmt" type="number" /></td>

     <td><input class="pmt" type="number" /></td>

     <td><input class="pmt" type="number" /></td>

     <td><input class="pmt" type="number" /></td></tr>

  </table><br />

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

<p><input onclick="IRR()" type="button" value="計算內部報酬率" /></p> <!-- 按下 button 去執行 JavaScript IRR( )-->

  </body>

<p>報酬率<b id="irr"></b></p>

<p>淨現值<b id="npv"></b></p>

<p>迴圈次數<b id="loopNumber"></b></p> 


<script>

const period=4;

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>

留言

  1. 很好,跟著老師學,能跑出結果,就會有成就感。跟我學習,讓自己愈來愈強大,可以將自己的人格與能力外溢到世界,世界更美好!

    回覆刪除

張貼留言

這個網誌中的熱門文章