VB .NET -
Cálculos financeiros : Juros e Desconto
A linguagem VB .NET fornece uma maneira muito simples de realizar cálculos usando funções matemáticas e neste artigo irei apresentar algumas dessas funções e criar um exemplo simples realizando cálculos na linguagem VB .NET.
A seguir temos as operações básicas realizadas pelo VB .NET :
Operações matemáticas básicas
|> Adição
(+)
|> Subtração (-)
|> Multiplicação (*)
|> Divisão (/)
|> Exponenciação (^)
|> Divisão Inteira (\)
|> Resto da divisão (Mod)
Só isso !!!! ![]()
É claro que não...
![]()
Para outras operações você pode usar os métodos disponíveis na classe System.Math.
A seguir temos alguns membros da classe System.Math :
|> Funções
Trigonométricas (Sin, Cos, Tan, etc)
|> Funções Logarítmicas (Log e Log10)
|> Constantes (PI e E)
|> Funções para Potenciação (Exp, Pow, e Sqrt)
|> Funções para Arredondamento (Floor, Ceiling)
|> Funções Comparativas (Max, Min)
|> Funções Relacionados com sinais (Abs)
Vejamos a seguir alguns
exemplo de utilização de funções matemáticas:(Observe que em alguns casos não
precisamos definir a classe Math)
| Função | Uso |
|---|---|
| Math.Abs() | Retorna o valor
absoluto. Math.Abs(-10) retorna 10. |
| Math.Ceiling() | Retorna o menor
inteiro maior que é maior ou igual ao número
especificado: Math.Ceiling(5.333) retorna 6. |
| Fix() | Retorna a porção
inteira de um número. Fix(5.3333) retorna 5. |
| Math.Floor() | Retorna o maior
inteiro que é menor que ou igual ao número
especificado: Fix(5.3333) retorna 5. Para números negativos o comportamento pode ser diferente: Math.Floor(4.8) retorna 4. Math.Floor(-4.8) retorna -5. |
| Int() | Retorna a porção
inteira de um número: Int(5.3333) retorna 5. |
| Math.Max() | Retorna o maior
entre dois números: Math.Max(5,7) retorna 7. |
| Math.Min() | Retorna o menor
dentre dois números: Math.Min(5,7) retorna 5. |
| Math.Pow() | Retorna um número
elevado a potência indicada: Math.Pow(12,2) - (doze ao quadrado) retorna 144. |
| Rnd() | Retorna a número aleatório entre 0 e 1. Usado em conjunto com a instrução Randomize para iniciar o gerador de números aleatórios: |
| Math.Round() | Arredonda um
número para um número específico de casas decimais.
Arredonda com 5 casas decimais. Math.Round(1.1234567,5) retorna 1.12346. Math.Round(5.44, 1) - retorna 5.4 Math.Round(5.45, 1) - retorna 5.4 Math.Round(5.46, 1) - retorna 5.5 Math.Round(5.54, 1) - retorna 5.5 Math.Round(5.55, 1) - retorna 5.6 Math.Round(5.56, 1) - retorna 5.6 Se o número a ser arredondado estiver exatamente entre a metade de dois números como 5.5 ou 6.5 ou 7.5 o arredondamento ocorrerá retornando o número par mais próximo ao número: Math.Round(5.5) ' retorna 6 Math.Round(8.5) ' retorna 8 |
| Math.Sign() | Retorna o sinal de
um número. Retorna -1 se negativo e 1 se positivo. Math.Sign(-5) retorna -1. |
| Math.Sqrt() | Retorna a raiz
quadrada de um número positivo: Math.Sqrt(144) retorna 12. |
| Math.Pi | Representa
a constante PI A = Math.PI * Math.Pow(raio, 2) - retorna a área do círculo para o raio informado (A= PI . R ^2) Obs: O símbolo ^ significa "elevado a" |
Aplicação Prática - Juros Compostos
No regime de juros compostos os
juros obtidos a cada período são incorporados ao capital
para o cálculo dos juros do período seguinte.
A capitalização é o momento no qual os juros são incorporados
ao principal.
Exemplo : Após quatro
meses de capitalização, temos:
1º
mês: M = C .(1 + i)
2º mês: o capital é igual ao montante do mês anterior: M = C
x (1 + i) x (1 + i)
3º mês: o capital é igual ao montante do mês anterior: M = C
x (1 + i) x (1 + i) x (1 + i)
4º mês: o capital é igual ao montante do mês anterior: M = C
x (1 + i) x (1 + i) x (1 + i) x (1 + i)
Dessa forma obtemos a seguinte fórmula: M = C . (1
+ i)^n
Onde a taxa de juros i deve ser expressa na mesma medida de
tempo de n, isto é, se o tempo for expresso em meses
a taxa de juros usada deve ser mensal.
A fórmula acima expressa na linguagem VB .NET poderia ser escrita da seguinte forma:
| Dim M as Double Dim C As Double Dim i As Double Dim n as Double M
= C * Math.Pow((1 + i ), n
) |
Para calcular só os juros basta subtrair o capital do montante
no final de um período: J = M - C
Além destas funções o VB .NET
disponibiliza algumas funções financeiras para cálculos mais
precisos e específicos. Veja abaixo as principais:
Funções Financeiras presentes no namespace Microsoft.VisualBasic.Financial
| Ação | Função |
|---|---|
| Calcular depreciação | DDB, SLN, SYD |
| Calcular valor futuro | FV |
| Calcular taxa de juros. | Rate |
| Calcular taxa interna de um retorno | IRR, MIRR |
| Calcular número de períodos | NPer |
| Calcular pagamentos | IPmt, Pmt, PPmt |
| Calcular valor presente. | NPV, PV |
Vamos agora a parte prática...![]()
Vamos criar um projeto Windows Forms que permite calcular o Montante, o Capital e o Tempo usando a fórmula dos juros Compostos.
Para isso eu vou usar o Visual Basic 2008 Express Edition e no menu File -> New Project selecionar o template Windows Forms Application informando o nome JurosCompostos.
No formulário padrão form1.vb vamos definir um leiaute bem simples conforme o da figura abaixo:
![]() |
No formulário o usuário deverá selecionar o que deseja calcular : Montante, Capital ou Tempo.
Em seguida deverá informar os valores solicitados conforme a sua opção, e, para calcular clicar no botão Calcular.
Para realizar os cálculos vou criar uma classe chamada Calcular. Para isso selecione o menu Project -> Add Class;
A seguir informe o nome Calcular.vb e clique no botão Add;
O código da classe esta exibido abaixo:
Public Class Calcular
Private _montante As Double
Private _capital As Double
Private _taxa As Double
Private _tempo As Double
Sub New()
End Sub
Public Property Montante() As Double
Get
Return _montante
End Get
Set(ByVal value As Double)
_montante = value
End Set
End Property
Public Property Capital() As Double
Get
Return _capital
End Get
Set(ByVal value As Double)
_capital = value
End Set
End Property
Public Property Taxa() As Double
Get
Return _taxa
End Get
Set(ByVal value As Double)
_taxa = value
End Set
End Property
Public Property Tempo() As Double
Get
Return _tempo
End Get
Set(ByVal value As Double)
_tempo = value
End Set
End Property
Public Shared Function CalculaMontante(ByVal calc As Calcular) As Double
Dim valor As Double
Try
valor = calc.Capital * Math.Pow((1 + calc.Taxa), calc.Tempo)
Catch ex As Exception
Throw
End Try
Return valor
End Function
Public Shared Function CalculaCapital(ByVal calc As Calcular) As Double
Dim valor As Double
Try
valor = calc.Montante / Math.Pow((1 + calc.Taxa), calc.Tempo)
Catch ex As Exception
Throw
End Try
Return valor
End Function
Public Shared Function CalculaTempo(ByVal calc As Calcular) As Double
Dim valor As Double
Try
valor = (Math.Log10(calc.Montante) - Math.Log10(calc.Capital)) / Math.Log10(1 + calc.Taxa)
Catch ex As Exception
Throw
End Try
Return valor
End Function
End Class
|
A classe Calcular possui os seguintes membros:
Propriedades
Métodos:
Nota: Os métodos foram definidos como shared de forma que não precisamos criar uma instância da classe para acessá-los.
No formulário form1.vb temos o seguinte código :
Public Class Form1
Dim resultado As Double
Dim juros As Double
Dim calculos As Calcular
Private Sub rdbMontante_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdbMontante.CheckedChanged
grade1()
End Sub
Private Sub rdbCapital_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdbCapital.CheckedChanged
Me.Width = 302
grade2()
End Sub
Private Sub rdbTempo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdbTempo.CheckedChanged
Me.Width = 302
grade4()
End Sub
Private Sub grade1()
Label1.Text = "Capital"
Label2.Text = "Tempo"
Label3.Text = "Taxa de Juros"
End Sub
Private Sub grade2()
Label1.Text = "Montante"
Label2.Text = "Tempo"
Label3.Text = "Taxa de Juros"
End Sub
Private Sub grade4()
Label1.Text = "Montante"
Label2.Text = "Capital"
Label3.Text = "Taxa de Juros"
End Sub
Private Sub btnCalcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalcular.Click
calculos = New Calcular
If txtValor1.Text = String.Empty Or txtValor2.Text = String.Empty Or txtValor3.Text = String.Empty Then
Return
End If
If rdbMontante.Checked Then
calculos.Capital = Convert.ToDouble(txtValor1.Text)
calculos.Tempo = Convert.ToDouble(txtValor2.Text)
calculos.Taxa = Convert.ToDouble(txtValor3.Text) / 100
Try
resultado = Math.Round(Calcular.CalculaMontante(calculos), 2)
juros = resultado - calculos.Capital
resultado = String.Format("{0:C}", resultado)
juros = String.Format("{0:C}", juros)
lblResultado.Text = "Montante = " & resultado.ToString
lblJuros.Text = "Juros = " & juros.ToString
exibeDetalhes(calculos)
Catch ex As Exception
MessageBox.Show("Erro : " & ex.Message)
End Try
ElseIf rdbCapital.Checked Then
calculos.Montante = Convert.ToDouble(txtValor1.Text)
calculos.Tempo = Convert.ToDouble(txtValor2.Text)
calculos.Taxa = Convert.ToDouble(txtValor3.Text) / 100
Try
resultado = String.Format("{0:C}", Calcular.CalculaCapital(calculos))
lblResultado.Text = "Capital = " & resultado
lblJuros.Text = ""
Catch ex As Exception
MessageBox.Show("Erro : " & ex.Message)
End Try
ElseIf rdbTempo.Checked Then
calculos.Montante = Convert.ToDouble(txtValor1.Text)
calculos.Capital = Convert.ToDouble(txtValor2.Text)
calculos.Taxa = Convert.ToDouble(txtValor3.Text) / 100
Try
resultado = Math.Round(Calcular.CalculaTempo(calculos), 4)
lblResultado.Text = "Tempo = " & resultado.ToString
lblJuros.Text = ""
Catch ex As Exception
MessageBox.Show("Erro : " & ex.Message)
End Try
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cboUnidadeTempo.SelectedIndex = 0
End Sub
Private Sub exibeDetalhes(ByVal calc As Calcular)
Dim i As Integer
Me.Width = 450
listaCalculo.Items.Clear()
For i = 0 To calc.Tempo
calculos.Tempo = i
resultado = Math.Round(Calcular.CalculaMontante(calculos), 2)
listaCalculo.Items.Add(i & "-" & String.Format("{0:C}", resultado & vbCrLf))
Next
End Sub
End Class
|
Abaixo temos o resultado da execução calculando :
![]() |
![]() |
![]() |
O programa é simples mas serve para resolver problemas do seguinte tipo:
Se você emprestar ao seu amigo
R$ 5.000,00, a juros compostos, pelo prazo de 5 meses, à taxa de
2% ao mês. Quanto deverá receber de juros ?
Para encerrar eu vou falar um pouco sobre desconto.
Desconto
Racional Composto
Calcular o desconto racional composto sobre um valor
nominal N, obtendo o respectivo valor atual A, é o mesmo que
obter o capital C, de um montante M, a juros compostos. Então,
por analogia
| CAPITAL (C) | => VALOR ATUAL (A) |
| MONTANTE (M) | => VALOR NOMINAL (N) |
Se para o cálculo do montante
composto dizemos que M = C . (1 + i) ^ n , então, para o cálculo do valor atual
racional compostos, vamos dizer que:

Para entender melhor vamos mostrar um exemplo de problema resolvido :
1) Um título de R$ 1.000,00 é
descontado 3 meses antes do vencimento, à taxa racional composta
de 10% ao mês. Qual o valor atual ?
Resolução:
N = R$
1.000
n = 3
i = 10% = 0,1
Substituindo os dados do problema em A => temos => A = N . (1 + i)^ -n , dai:
A = N .
(1 + i) ^ -n
A = N . (1,1)-3
A = 1.000 . 0,75131
A = R$ 751,31
Tudo certo e como ficaria a tal fórmula no VB .NET ?
A = N * Math.Pow((1 + i), -n )
Vamos então incluir o método CalculaDescontoRacional na classe Calcular conforme o código abaixo:
Public Shared Function CalculaDescontoRacional(ByVal calc As Calcular) As Double
Dim valor As Double
Try
valor = calc.Montante * Math.Pow((1 + calc.Taxa), -calc.Tempo)
Catch ex As Exception
Throw
End Try
Return valor
End Function
|
A seguir vamos alterar a interface incluindo mais um radiobutton (rdbDesconto) conforme o leiaute abaixo:
![]() |
E finalmente vamos incluir o código abaixo no formulário para tratar as informações recebidas e chamar o método CalculaDescontoRacional da classe:
Obs: O código incluído esta destacado em azul.
Private Sub btnCalcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalcular.Click
calculos = New Calcular
If txtValor1.Text = String.Empty Or txtValor2.Text = String.Empty Or txtValor3.Text = String.Empty Then
Return
End If
If rdbMontante.Checked Then
calculos.Capital = Convert.ToDouble(txtValor1.Text)
calculos.Tempo = Convert.ToDouble(txtValor2.Text)
calculos.Taxa = Convert.ToDouble(txtValor3.Text) / 100
Try
resultado = Math.Round(Calcular.CalculaMontante(calculos), 2)
juros = resultado - calculos.Capital
resultado = String.Format("{0:C}", resultado)
juros = String.Format("{0:C}", juros)
lblResultado.Text = "Montante = " & resultado.ToString
lblJuros.Text = "Juros = " & juros.ToString
exibeDetalhes(calculos)
Catch ex As Exception
MessageBox.Show("Erro : " & ex.Message)
End Try
ElseIf rdbCapital.Checked Then
calculos.Montante = Convert.ToDouble(txtValor1.Text)
calculos.Tempo = Convert.ToDouble(txtValor2.Text)
calculos.Taxa = Convert.ToDouble(txtValor3.Text) / 100
Try
resultado = String.Format("{0:C}", Calcular.CalculaCapital(calculos))
lblResultado.Text = "Capital = " & resultado
lblJuros.Text = ""
Catch ex As Exception
MessageBox.Show("Erro : " & ex.Message)
End Try
ElseIf rdbTempo.Checked Then
calculos.Montante = Convert.ToDouble(txtValor1.Text)
calculos.Capital = Convert.ToDouble(txtValor2.Text)
calculos.Taxa = Convert.ToDouble(txtValor3.Text) / 100
Try
resultado = Math.Round(Calcular.CalculaTempo(calculos), 4)
lblResultado.Text = "Tempo = " & resultado.ToString
lblJuros.Text = ""
Catch ex As Exception
MessageBox.Show("Erro : " & ex.Message)
End Try
ElseIf rdbDesconto.Checked Then
calculos.Montante = Convert.ToDouble(txtValor1.Text)
calculos.Tempo = Convert.ToDouble(txtValor2.Text)
calculos.Taxa = Convert.ToDouble(txtValor3.Text) / 100
Try
resultado = String.Format("{0:C}", Calcular.CalculaDescontoRacional(calculos))
lblResultado.Text = "Valor Atual = " & resultado
lblJuros.Text = ""
Catch ex As Exception
MessageBox.Show("Erro : " & ex.Message)
End Try
End If
End Sub
|
Executando o projeto e fazendo o cálculo para o exemplo mostrado iremos obter:
![]() |
E era isso que eu tinha para falar sobre como calcular juros e desconto com o VB .NET.
Pegue o projeto completo aqui:
JurosCompostos.zip
Eu sei é apenas VB .NET, mas eu gosto...
Referências: