2009-07-15 22 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アセンブリはサポートしていません。 –

+0

Visual Basicアセンブリでリフレクタを使用して、数式を取得してプロジェクトで直接使用することができます。 –

+0

おかげでたくさん...あなたの機能は本当に私のお尻を保存します。私はFlash AS3で使用していますが、Flashに移行することもできます:) –

4

それはタイプMicrosoft.VisualBasic.Financial, Microsoft.VisualBasic.dllでは静的であり、 PV関数は、現在の値を計算します。

F#で実装されているExcel Financial Functionsも注目に値します。このAPIには、任意のF#デザインまたはランタイムコンポーネントで使用するオプションがあります。

+0

+1はExcelの財務機能に言及しています。 – Noldorin

2

注意してください。あなたは、継続的に配合するかどうかを区別する必要があります。

Pv = exp(-rt).Fv 

と離散的にこれらは異なる答えを与えるだろうし、あなたが必要がどちらを使用することを知って例えば

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

(上記の年間支払いのためである)

配合。

+0

計算は毎月の支払いを行っています。期間は月数で、利子は毎月の利子です。 –

+0

したがって、2番目の式を適切に適合させることができます。それはいいです。あなたが何が必要なのかを知っている限り(一部の人はそうではなく、それはすべて涙で終わります:-) –

4

Microsoft.VisualBasicライブラリを使用することはできますが、これは私にとってとても優雅な解決策ではありません。とにかくそれが将来非難されたなら私は驚かないだろう。

単純な拡張は、素敵な解決策のようになります。

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

これはもちろん、複利の簡単な定義をベースにしています。同様に計算できる現在価値にはさまざまなバリエーションがあります。

ベース10の精度を維持するためにdecimalタイプを使用することに注意してください。また、Math.Powを使用して分数の時間長を許可します。