2009-07-15 63 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来获得分数时间长度。