2009-07-15 58 views
2

Present Value是未來付款或一系列未來付款的給定日期的價值,打折以反映貨幣的時間價值和投資風險等其他因素。是的,我知道這是公式,所以不需要。計算現值

但我想知道如果這種方法已經在.NET庫中預定義。我找不到它。 (我猜.NET不包含這個功能,所以我只需要使用我自己的功能。)

我沒有用任何漂亮的第三方組件或使用C#編寫的示例。我必須使用一些允許任何標準.NET庫的第三方腳本解決方案。我可以爲第三方庫添加自定義引用,甚至可以編寫自己的附加模塊,但我試圖避免這種情況。

回答

3

該視覺基礎庫中有一個Financial類。 Financial.PV()應該爲你做詭計。

如果您沒有使用Visual Basic,您仍然可以從其他語言的項目中引用該庫並使用財務功能。

根據您的意見,你不能直接使用圖書館,Financial.Pv函數內部的Visual Basic源代碼看起來是這樣的......

Public Shared Function PV(ByVal Rate As Double, ByVal NPer As Double, ByVal Pmt As Double, ByVal Optional FV As Double = 0, ByVal Optional Due As DueDate = 0) As Double 
    Dim num As Double 
    If (Rate = 0) Then 
     Return (-FV - (Pmt * NPer)) 
    End If 
    If (Due <> DueDate.EndOfPeriod) Then 
     num = (1 + Rate) 
    Else 
     num = 1 
    End If 
    Dim x As Double = (1 + Rate) 
    Dim num2 As Double = Math.Pow(x, NPer) 
    Return (-(FV + ((Pmt * num) * ((num2 - 1)/Rate)))/num2) 
End Function 
+0

我甚至沒有任何Microsoft IDE。我正在使用名爲「Composer」的第三方工具,它是一個半圖形開發系統。它創建可以添加到現有C#項目的.NET程序集。這主要是針對非技術人員編寫簡單的公式。不幸的是,它不支持VisualBasic程序集。 – 2009-07-15 12:22:33

+0

您可以在Visual Basic程序集上使用反射器來獲取它們的公式並直接在您的項目中使用它們。 – 2009-07-15 13:27:51

+0

非常感謝...你的功能真的救了我的屁股。雖然我在Flash AS3中使用它,但我設法將它遷移到Flash :) – 2012-11-10 05:57:02

4

是,在Microsoft.VisualBasic.Financial, Microsoft.VisualBasic.dll靜態類型函數PV計算當前值。

另外值得注意的是在F#中實現的Excel Financial Functions。該API可以用於任何F#設計或運行時組件。

2

請注意。您需要區分不斷混合例如

Pv = exp(-rt).Fv 

和離散混合e.g

Pv = Fv.[(1 + r)^(-n)] 

(以上爲年度支付)

這些會給出不同的答案,你需要知道使用哪一個。

4

您可以使用Microsoft.VisualBasic庫,但這對我來說似乎不是一個非常優雅的解決方案。無論如何,如果它在將來被棄用,我不會感到驚訝。

的簡單擴展將是一個很好的解決方案:

public decimal PresentValue(this decimal value, decimal interestRate, 
    decimal years) 
{ 
    return value/Math.Pow(1 + interestRate, years); 
} 

這是基於離複利的簡單的定義當然。您可以類似計算現值的變化。

請注意使用decimal類型來保持基準10的準確度。它還允許通過使用Math.Pow來獲得分數時間長度。