IRR ORACLE SQL(B)を達成するために計算

前の版を達成します。https://www.cnblogs.com/Alex-Zeng/p/9334582.html

前の版で達成、いくつかのケースでは負を計算し、Excelの計算が異なっています。だから、実装を変更。

以下を達成するために特定のコード:

関数 IRR_ZEN(p_amount_array  typ_cashflow_array)RETURN  NUMBERで ある
    rtn_err       番号=  0 ; 
    irrGuess      番号=  0.01- デフォルト:10% 
    IRRの           =  0.0 
    minDistanceの   = 1E - 15- 繰り返し:小さい距離、小さい補間 
    maxIterationの整数=  1000年; 
  
    和紙ブール:= falseは、
    noOfCashFlows 整数=  0 ; 
    cashValueの      =  0.0 
    cashFlowStartの=  0.0 
  
    result_value 番号=  0.0 
  
  BEGIN 
    IRR:= irrGuess。
    result_value:=  - 999999 ; 
    noOfCashFlows:= p_amount_array。数えます; 
  
    -ビジネスのスタートアップは、コスト 
    cashFlowStart:= p_amount_array(1 ); 
    
    以下のための 1 .. maxIterationループ
       - 現在のIRRと計算現金価値: 
      cashValue:= cashFlowStart。- 起動時のコストとのinit 
    
      - 各キャッシュフローの
      ための J  2 .. noOfCashFlowsループ
        cashValue:= cashValue + p_amount_array(J)/  パワー1.0  + IRR、J - 1 )。
      終わりループ; 
    
      - 現金値はほぼゼロである
      場合ABS(cashValue)<  0.0000000001次に
        - DBMS_OUTPUT.PUT_LINE( 'ABS(cashValue)<0.0000000001:' || TO_CHAR(cashValue))。
        result_value:= IRR;
        終了;
      終了し た場合
    
      - 次の反復のためIRR調整:
      - 現金値> 0 =>次IRR>現在のIRR 
      場合(cashValue >  0、次いで
        場合和紙次いで
          :irrGuess = irrGuess /  2;
        終了し た場合
      
        IRR:= IRR + irrGuess。
      
        もし和紙その後、
          irrGuess:= irrGuess - minDistance。
          和紙:= falseは、
        終了し た場合
      
      他の
        - 現金値<0 =>次のIRR <現在のIRR 
        irrGuess:= irrGuess /  2 ; 
        IRR:= IRR - irrGuess。
        和紙:= はtrue。
      エンド 場合; 
    
      - 推定結果を続行するには小さすぎる=>エンド
      - 計算
      場合(irrGuess <= minDistance)次に
        - DBMS_OUTPUT.PUT_LINE( 'irrGuess <= minDistance:' || TO_CHAR(irrGuess))。
        result_value:= IRR;
        終了;
      終了し た場合エンドループ; 
  
    リターンresult_value。
  EXCEPTION 
    WHEN OTHERS THEN 
      DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM、1640 )); 
      リターンrtn_err。
  END IRR_ZEN;

 

おすすめ

転載: www.cnblogs.com/Alex-Zeng/p/12107703.html