Расчет приведенной стоимости - PullRequest
2 голосов
/ 15 июля 2009

Приведенная стоимость - это стоимость на определенную дату будущего платежа или серии будущих платежей, дисконтированная для отражения временной стоимости денег и других факторов, таких как инвестиционный риск. И да, я знаю, что это формула, поэтому она не нужна.

Но мне интересно, если этот метод уже предопределен в библиотеках .NET. Я не могу найти это. (И я полагаю, что .NET не содержит этой функции, поэтому мне просто придется использовать мою собственную функцию.)

У меня нет никаких полезных сторонних компонентов или примеров, написанных на C #. Мне нужно использовать какое-то стороннее решение для скриптинга, которое позволяет использовать любую стандартную библиотеку .NET. Я могу добавлять пользовательские ссылки на сторонние библиотеки и даже писать свои собственные дополнительные модули, но стараюсь этого избежать.

Ответы [ 4 ]

4 голосов
/ 15 июля 2009

Вы можете использовать библиотеку Microsoft.VisualBasic, но это не кажется мне очень элегантным решением. Я не удивлюсь, если в будущем это будет устаревшим.

Хорошим решением было бы простое расширение:

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

Это, конечно, основано на простом определении сложных процентов. Существуют вариации текущей стоимости, которые можно рассчитать аналогичным образом.

Обратите внимание на использование типа decimal для сохранения точности базы 10. Это также позволяет использовать дробную продолжительность времени с помощью Math.Pow.

4 голосов
/ 15 июля 2009

В типе Microsoft.VisualBasic.Financial, Microsoft.VisualBasic.dll статическая функция PV вычисляет текущее значение.

Также стоит отметить Финансовые функции Excel , реализованные в F #. Этот API имеет опцию, которую можно использовать без каких-либо компонентов дизайна F # или среды выполнения.

3 голосов
/ 15 июля 2009

В библиотеке Visual Basic есть класс Financial . Financial.PV () должен помочь вам.

Если вы не используете Visual Basic - вы все равно можете ссылаться на эту библиотеку из своего проекта на других языках и использовать финансовые функции.

Согласно вашему комментарию, вы не можете использовать библиотеку напрямую, исходный код Visual Basic внутри функции Financial.Pv выглядит примерно так ...

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
2 голосов
/ 15 июля 2009

Осторожно. Вы должны различать непрерывное соединение, например,

Pv = exp(-rt).Fv

и дискретное соединение, например,

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

(выше для годового платежа)

Они дадут разные ответы, и вам нужно будет знать , какой из них использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...