VB.NET - Funções Financeiras


O VB.NET apresenta em seu arsenal de classes diversas funções financeiras que podem ser usadas para cálculos financeiros. Aqui estarei apresentando um resumo das principais funções , suas propriedades e uso.        

Vou começar com as funções que retornam parâmetros básicos para um cálculo financeiro.

Ao trabalho...

lPmt      namespace - Microsoft.VisualBasic.Financial

IPmt(rate, per, nper, pv[, fv[, due]])

rate (requerido,Double) - a taxa de juros por período.
per (requerido,Double) - o período no qual o pagamento será computado.
nper (requerido;Double) - número total de pagamentos no período.
pv (requerido;Double) - o valor atual de uma série de pagamentos futuros.
fv (opcional;Double) - o valor futuro ou balanço de caixa de um pagamento final. Se omitido o valor padrão é zero.

due (opcional,DueDat enumeration) - valor que indica quando os pagamentos são devidos. O valor padrão é DueDate.EndOfPeriod.

Valor de Retorno : retorna um Double representando o valor do pagamento dos juros sobre o capital investido/emprestado para um período de uma anuidade. Uma anuidade é uma série de pagamentos fixos feitos sobre um período de tempo.

Suponha que você tenha emprestado R$ 30.000,00 a uma taxa de juros anual de 11,5% para ser pago em 3 anos com pagamentos feitos no final de cada mês. Vamos calcular o valor do pagamento mensal e total que você dever receber sobre o capital no período.

Para resolver o problema basta aplicar a função : IPmt(rate, per, nper, pv[, fv[, due]])

Vamos então identificar o valor de cada argumento:

rate - a taxa de juros mensal é obtida dividindo-se a taxa de juros anual por 12 => 0.115/12
per - o período deverá estar compreendido entre 1 e 36 ( 3 anos)
nper - o número de pagamentos => 36
pv - o valor atual => 30.000,00
fv - será omitido => 0
due - o pagamento será feito no ínicio de cada mês
=> 1

Teremos então : lPmt(0.009583333, 1-36, 36, -30.000, 0, 1)

Sub Main()
     'IPmt(rate, per, nper, pv[, fv[, due]])
     'lPmt(0.009583333, 1-36, 36, -30.000, 0, 1)
     Dim pv, fv, nper As Double
     Dim rate, Pagamento, Total As Decimal
     pv = 30000
     fv = 0
     Rate = 0.115 / 12
     nper = 3 * 12
     Dim per As Integer
     For per = 1 To nper
         Pagamento = IPmt(rate, per, nper, -pv, fv, 1)
         Console.WriteLine(" mês " & per & " : " & Pagamento)
         Total = Total + Pagamento
     Next
     Console.WriteLine("Total dos juros no período : " & Total)
     Console.ReadLine()
 End Sub

O primeiro pagamento é de r$ 278,10 e o último pagamento é menor que R$ 10,00. O total pago é R$ 5.276,02 sobre o capital.

PPmt      namespace - Microsoft.VisualBasic.Financial

PPmt(rate, per, nper, pv[, fv[, due]])

rate (requerido,Double) - a taxa de juros por período.
per (requerido,Double) - o período no qual o pagamento será computado.
nper (requerido;Double) - número total de pagamentos no período.
pv (requerido;Double) - o valor atual de uma série de pagamentos futuros.
fv (opcional;Double) - o valor futuro ou balanço de caixa de um pagamento final. Se omitido o valor padrão é zero.
due (opcional,DueDat enumeration) - valor que indica quando os pagamentos são devidos. O valor padrão é DueDate.EndOfPeriod.

Valor de Retorno : retorna um Double representando o pagamento do principal investido/aplicado para um dado período de um anuidade.

Para calcularmos o pagamento do principal para o exemplo anterior usamos a função : PPmt(0.009583333, 1-36, 36, -30.000, 0, 1)

Module Module1
    Sub Main()
        'PPmt(rate, per, nper, pv[, fv[, due]])
        'lPmt(0.009583333, 1-36, 36, -30.000, 0, 1)
        Dim pv, fv, nper As Double
        Dim rate, Pagamento, Total As Decimal
        pv = 30000
        fv = 0
        Rate = 0.115 / 12
        nper = 3 * 12
        Dim per As Integer
        For per = 1 To nper
            Pagamento = PPmt(rate, per, nper, -pv, fv, 1)
            Console.WriteLine(" mês " & per & " : " & Pagamento)
            Total = Total + Pagamento
        Next
        Console.WriteLine("Total do pagamento do principal : " & Total)
        Console.ReadLine()
    End Sub
End Module

O pagamento aumenta com o tempo . O valor total será igual ao montante do capital. O valor total incluindo os juros será a soma de lPmt() e PPmt().

Pmt      namespace - Microsoft.VisualBasic.Financial

Pmt(rate, nper, pv[, fv[, due]])

rate (requerido,Double) - a taxa de juros por período.
nper (requerido;Double) - número total de pagamentos no período.
pv (requerido;Double) - o valor atual de uma série de pagamentos futuros.
fv (opcional;Double) - o valor futuro ou balanço de caixa de um pagamento final. Se omitido o valor padrão é zero.
due (opcional,DueDat enumeration) - valor que indica quando os pagamentos são devidos. O valor padrão é DueDate.EndOfPeriod.

Valor de Retorno : retorna um Double representando o pagamento(principal e juros) para uma anuidade baseada em um período com pagamentos e taxa de juros fixos.

Module Module1
    Sub Main()
        'Pmt(rate, nper, pv[, fv[, due]])
        'Pmt(0.009583333, 36 , 30000 , 0 , 1)
        Dim pv, fv, nper As Double
        Dim rate, Pagamento, Total As Decimal
        pv = 30000
        fv = 0
        Rate = 0.115 / 12
        nper = 3 * 12
        Dim per As Integer
        For per = 1 To nper
            Pagamento = Pmt(rate, nper, -pv, fv, 1)
            Console.WriteLine(" mês " & per & " : " & Pagamento)
            Total = Total + Pagamento
        Next
        Console.WriteLine("Total recebido no período : " & Total)
        Console.ReadLine()
    End Sub
End Module

FV     namespace - Microsoft.VisualBasic.Financial

FV(rate, nper, pmt [, pv [, due]])

rate (requerido,Double) - a taxa de juros por período.
nper (requerido;Double) - número total de pagamentos no período.
pmt (requerido;Double) - o pagamento feito em cada período.
pv (opcional;Variant) - o valor atual de um capital ou anuidade.
due (opcional,DueDat enumeration) - valor que indica quando os pagamentos são devidos. O valor padrão é DueDate.EndOfPeriod.

Valor de Retorno : retorna um Double representando o valor futuro de uma anuidade baseado em um número regular de pagamentos de um valor fixo e uma taxa de juros sobre o período da anuidade.

Vamos supor que você deseja calcular o valor futuro de um investimento com uma taxa de juros de 6,25% , 48 pagamentos mensais de R$ 180,00 , e um valor presente de R$ 12.000,00.

Vamos definir os argumentos para a função : FV(rate, nper, pmt [, pv [, due]])

rate - a taxa de juros => 0,0625
nper - número de pagamentos => 48
pmt - pagamento feito em cada período => 180,00
pv - valor atual do capital => 12.000,00
due - no início do período => 1 (
DueDate.BegOfPeriod)

Abaixo temos o código VB.NET:

Module Module1
    Sub Main()
        'FV(rate, nper, pmt [, pv [, due]])
        'Vamos supor que você deseja calcular o valor futuro de um investimento 
        'com uma taxa de juros de 6,25% ANUAL, 48 pagamentos mensais de R$ 180,00 , 
        'e um valor presente de R$ 12.000,00. 
        Dim pv, valor As Double
        Dim rate, pmt As Double
        Dim nper As Integer
        pmt = 180
        rate = 6.25 / 100
        nper = 48
        pv = 12000
        Console.WriteLine("Investimento      :  " + pv.ToString)
        Console.WriteLine("Taxa de juros     :  " + (rate / 12).ToString)
        Console.WriteLine("No de pagamentos  :  " + nper.ToString)
        Console.WriteLine("Valor pgto mensal :  " + pmt.ToString)
        Console.WriteLine("")
        valor = FV(rate / 12, nper, -pmt, -pv, DueDate.BegOfPeriod)
        MsgBox("Após " & nper & " meses seus retorno será de : R$ " & valor)
        Console.ReadLine()
    End Sub

NPer     namespace - Microsoft.VisualBasic.Financial

NPer(rate, pmt , pv [, fv [, due]])

rate (requerido,Double) - a taxa de juros por período.
pmt (requerido;Double) - o pagamento feito em cada período.
pv (opcional;Variant) - o valor atual de uma série de pagamentos futuros.
fv (opcional;Double) - o valor futuro de uma série de pagamentos. Se omitido o valor padrão é zero.
due (opcional,DueDat enumeration) - valor que indica quando os pagamentos são devidos. O valor padrão é DueDate.EndOfPeriod.

Valor de Retorno : retorna um Double representando o número de pagamentos periódicos para uma anuidade.

Vamos supor que você tome um empréstimo de R$ 25.000,00 a juros de 11,5% ao ano, e você deseja pagar R$ 450,00 por mês. Vamos calcular qual o número de pagamentos você precisará fazer para quitar o empréstimo.

Usando a função NPer(rate, pmt , pv [, fv [, due]]) teremos :

rate - a taxa de juros do período => 0,115/12
pmt - pagamento feito em cada período => 450,00
pv - valor atual do capital => 25.000,00
fv - o valor futuro de uma série de pagamentos. Se omitido o valor padrão é zero.
due - no início do período => 1 (DueDate.BegOfPeriod)

O código VB.NET é o seguinte:

Module Module1
    Sub Main()
        'NPer(rate, pmt , pv [, fv [, due]])
        'Vamos supor que você tome um empréstimo de R$ 25.000,00 a juros de 11,5% ao ano, 
        'e você deseja pagar R$ 450,00 por mês. Vamos calcular qual o número de pagamentos
        ' você precisará fazer para quitar o empréstimo. 
        '
        Dim pv, fv As Integer
        Dim rate, pmt As Double
        Dim Total As Integer
        fv = 0
        pv = 25000
        Rate = 0.115 / 12
        pmt = 450
        Total = NPer(rate, -pmt, pv, fv, DueDate.EndOfPeriod)
        If Int(Total) <> Total Then
            Total = Int(Total) + 1
        End If
        Console.WriteLine(" A duração do empréstimo será de : " & Total & " meses")
        Console.ReadLine()
    End Sub
End Module

O valor retornado para o exemplo será de 80 meses ou 6 anos e meio. Se o pagamento for aumentado de R$ 450,00 para R$ 500,00 a duração será reduzida para 68 meses.

Rate     namespace - Microsoft.VisualBasic.Financial

Rate
(nper, pmt , pv [, fv [, due[, guess]]])

nper (requerido,Double) - representa o número total de pagamentos no período da anuidade.
pmt (requerido;Double) - o pagamento feito em cada período.
pv (opcional;Variant) - o valor atual de uma série de pagamentos futuros.
fv (opcional;Double) - o valor futuro de uma série de pagamentos. Se omitido o valor padrão é zero.
due (opcional,DueDat enumeration) - valor que indica quando os pagamentos são devidos. O valor padrão é DueDate.EndOfPeriod.

guess (opcional Variant) -especifica um valor estimado que será retornado pela taxa (rate). Se omitido o valor padrão é 0.1 (10 %)

Valor de Retorno : retorna um Double representando a taxa de juros para o período da anuidade.

A seguir um exemplo de código para cálculo da taxa de juros:

Module Module1
    Sub Main()

        'Rate(nper, pmt , pv [, fv [, due[, guess]]])

        Dim Fmt, FVal, Guess, valorFinanciado, valorPagamento, numeroPagamentos, tpPgto, taxa
        Const ENDPERIOD = 0, BEGINPERIOD = 1   ' Quando o pagamento será feito
        Fmt = "##0.00" ' Define o formato da porcentagem. 
        FVal = 0       ' ususalmente zero para um financiamento
        Guess = 0.1    ' 10%. 
        valorFinanciado = InputBox("Quanto deseja financiar ?")
        valorPagamento = InputBox("Qual o valor do pagamento mensal ?")
        numeroPagamentos = InputBox("Quer pagar em quantos meses ?")
        tpPgto = MsgBox("Você vai realizar pagamentos no final do mês ? ", vbYesNo)
        If tpPgto = vbNo Then
            tpPgto = BEGINPERIOD
        Else
            tpPgto = ENDPERIOD
        End If
        taxa = (Rate(numeroPagamentos, -valorPagamento, valorFinanciado, FVal, tpPgto, Guess) * 12) * 100
        MsgBox("A taxa de juros é : " & Format(CInt(taxa), Fmt) & " % ")
        Console.ReadLine()
    End Sub

Já deu para sentir que o VB.NET fornece muitos recursos para cálculos financeiros. E não acabou , ainda existem as seguintes funções :

Função Retorno
PV() o valor presente de um investimento
NPV() o valor líquido de um investimento baseado em um série de fluxo de caixa periódicos e uma taxa de desconto
IRR() A taxa interna de retorno de um investimento
MIRR() A taxa interna modificada de retorno para uma série de fluxo de caixa periódicos
DDB() A depreciação de um bem para um período de tempo usando um método que você especificar.
SLN() A depreciação uniforme de um bem para um período simples

Então aguarde que voltarei ao assunto...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti