2010-08-12 38 views
-1

代碼如下,我試圖調用「RATE」函數。在這個php代碼中調用函數

RATE(120,-271.09,20000)是如何在excel中使用的,我認爲這個代碼應該可以工作。

我在做什麼錯?我怎樣才能得到它的工作

我的代碼是在這裏:http://pastebin.com/AbKqc8g1

+4

你需要提取的關鍵部位,並把它們放在你的問題。通過一個巨大的文件看浪費時間。 – 2010-08-12 14:24:24

回答

1

您必須創建此類的實例,然後運行RATE方法。

<?php 
    require("class.Financial.php"); 
    $fin  = new Financial(); 
    $result = $fin->RATE(120, -271.09, 20000); 
    echo $result; 
?> 
+0

謝謝,這幾乎工作。 我認爲這個函數一定有什麼問題,因爲它輸出值爲2個小數位,這對任何超過250個數字的結果都是「NAN」。 例如在那裏輸出-27應該輸出-2.420974,而是輸出-0.02420974 – James 2010-08-16 08:08:08

2

張貼在您的網址的代碼定義一個類結構,無論你的應用程序。因此,在調用該類中的任何函數之前,您需要創建該類的一個實例。例如,下面應該幫助你開始:

$financial = new Financial; 

$rate = $financial->RATE(120,-271.09,20000); 

print_r($rate); 

你很努力如何在應用程序中使用,這是目前還不清楚,但使用上述原則,你應該開始看到一些輸出。

0

@斯科特中號

這裏是功能:

/** 
* RATE 
* 
**/ 
function RATE($nper, $pmt, $pv, $fv = 0.0, $type = 0, $guess = 0.1) 
{ 
    $rate = $guess; 
    $i = 0; 
    $x0 = 0; 
    $x1 = $rate; 

    if (abs($rate) < FINANCIAL_ACCURACY) { 
     $y = $pv * (1 + $nper * $rate) + $pmt * (1 + $rate * $type) * $nper + $fv; 
    } else { 
     $f = exp($nper * log(1 + $rate)); 
     $y = $pv * $f + $pmt * (1/$rate + $type) * ($f - 1) + $fv; 
    } 
    $y0 = $pv + $pmt * $nper + $fv; 
    $y1 = $pv * $f + $pmt * (1/$rate + $type) * ($f - 1) + $fv; 

    // find root by secant method 
    while ((abs($y0 - $y1) > FINANCIAL_ACCURACY) && ($i < FINANCIAL_MAX_ITERATIONS)) 
    { 
     $rate = ($y1 * $x0 - $y0 * $x1)/($y1 - $y0); 
     $x0 = $x1; 
     $x1 = $rate; 

     if (abs($rate) < FINANCIAL_ACCURACY) { 
      $y = $pv * (1 + $nper * $rate) + $pmt * (1 + $rate * $type) * $nper + $fv; 
     } else { 
      $f = exp($nper * log(1 + $rate)); 
      $y = $pv * $f + $pmt * (1/$rate + $type) * ($f - 1) + $fv; 
     } 

     $y0 = $y1; 
     $y1 = $y; 
     $i++; 
    } 
    return $rate; 
}