第十一周詹瑋哲CSS+HTML+javaScript金融計算的準備

躉繳第1期第2期第3期

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

報酬直

淨現值

迴圈次數

<>

以下程式原始碼如下

<head>

<style>

.pmt {

width:80pt;

  height:20pt;

background-color: green;

color: white;

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>

留言

這個網誌中的熱門文章

詹瑋哲python math random

程式交易(演算法交易)