Página 1 de 1

CALCULO DE JUROS

Enviado: 04 Mar 2013 22:14
por EANDRIOLI
Amigos,

O sistema abaixo faz o cálculo de juros corrigindo um valor diariamente.

Gostaria de fazer com que o calculo fosse feito mensalmente (isso gera diferenças). Se alguem disponibilizar tem um tempinho para nos mostrar como ficaria o novo fonte que fará esse cálculo, agradeço. Inclusive, se abrir opção para escolher JUROS MENSAIS ou DIARIOS, melhor ainda.

Segue fonte:

Código: Selecionar todos

*****************
PROCEDURE CLC      
*****************
TEL=SAVENV()
WIN(9,10,17,65,"CALCULO DE JUROS ENTRE DATAS")
SET CURSOR ON
SET COLOR TO "N*/W,W/BG+"

VALOR  =0
JUROS_M=0
INICIO =DATE()
FIM    =DATE()
MULTA  =0
OBSERVA=SPACE(30)

@11,15 SAY "VALOR DO CAPITAL..:"
@12,15 SAY "DATA DE ORIGEM....:"
@13,15 SAY "DATA DE VENCIMENTO:"
@14,15 SAY "TAXA DE JUROS (M).:              %"
@15,15 SAY "MULTA NO FINAL....:              %"
@16,15 SAY "OBSERVACOES.......:"
@11,35 GET VALOR PICT "9,999,999.99"
@12,37 GET INICIO
@13,37 GET FIM
@14,41 GET JUROS_M PICT "99.999"
@15,42 GET MULTA PICT "99.99"
@16,35 GET OBSERVA
READ

IF LASTKEY()=27
   RSTENV(TEL)
   RETURN
ENDIF

IF VALOR < 0
   TPMOV="D"   //  Debito
ELSEIF VALOR >= 0
   TPMOV="C"   //  Credito
ENDIF

JUROS_D = JUROS_M/30            // Obtendo Juros Diarios
DTINI1  = INICIO+1              // Nao corrigir o Dia Inicial
DTINI2  = 0
ACUMVAL2= 0
ACUMVAL1= 0
ACUMVAL = 0
SALDO   = 0
VALORJU = 0
JUR_ACUM= 0

nOpc := MsgBox3("ONDE DESEJA IMPRIMIR?",,12,"TELA","IMPRESSORA","CANCELAR")
IF nOpc == 1
   WIN(12,13,17,64,"AGUARDE!!! IMPRIMINDO...","GR+/N","N+/W")
   FRAME(14,14,16,63)
   DO IMP_CLC_T
ELSEIF nOpc == 2
   DO IMP_CLC_I
ELSEIF nOpc == 3
   RETURN
ENDIF
RSTENV(TEL)
RETURN

*----------------------
PROCEDURE IMP_CLC_T        //   IMPRIMINDO EM TELA...
*----------------------
SET DEVICE TO PRINTER
SET PRINTER TO EXTRA1.PRN

IF PROW() = 0
   @PROW()+1,00 SAY "TAXA DE JUROS MENSAL:"
   @PROW(),22   SAY JUROS_M PICT "99.999"
   @PROW(),28   SAY "%"
   @PROW(),38   SAY "OBS.: "+OBSERVA
   @PROW()+1,00 SAY "PERIODO DE..........: "+DTOC(INICIO)+" A "+DTOC(FIM)
   @PROW(),60   SAY "MULTA:"
   @PROW(),67   SAY MULTA PICT "99.99"
   @PROW(),72   SAY "%"
   @PROW()+1,00 SAY REPL("-",75)
ENDIF

DO WHILE .T.
   DO WHILE .T.
      MES = MONTH(DTINI1)
      IF DTINI1 - 1 = FIM
         EXIT
      ENDIF
      DTINI1 = DTINI1 + 1
      JUR_ACUM = JUR_ACUM + JUROS_D
      IF MONTH(DTINI1) <> MES
         EXIT
      ELSE
         LOOP
      ENDIF
      EXIT
   ENDDO
   @PROW()+1,5 SAY "DATA           HISTORICO        VALORES                 SALDO"
   @PROW()+1,0 SAY REPL("-",75)
   @PROW()+1,5 SAY INICIO
   @PROW(),20  SAY "Movimento"
   @PROW(),30  SAY VALOR   PICT "999,999,999.99"
   @PROW(),45  SAY TPMOV
   @PROW(),47  SAY "*"
   @PROW(),52  SAY VALOR   PICT "999,999,999.99"
   VALORJU = VALOR * JUR_ACUM / 100
   @PROW()+1,5 SAY DTINI1 - 1   // Ultimo dia do Mes...
   @PROW(),20  SAY "Juros"
   @PROW(),30  SAY VALORJU PICT "999,999,999.99"
   @PROW(),45  SAY TPMOV
   ACUMVAL = VALOR + VALORJU
   @PROW(),52  SAY ACUMVAL PICT "999,999,999.99"
   EXIT
ENDDO

JUR_ACUM=0
DATAF=DTINI1-1

DO WHILE DATAF < FIM
   DATAF=DATAF+1
   MES=MONTH(DATAF+1)
   JUR_ACUM=JUR_ACUM + JUROS_D
   IF MONTH(DATAF) < MES .OR. MONTH(DATAF) > MES
      @PROW()+1,5 SAY DATAF
      @PROW(),20  SAY "Juros"
      VALORJU=ACUMVAL*JUR_ACUM/100
      @PROW(),30  SAY VALORJU         PICT "999,999,999.99"
      @PROW(),45  SAY TPMOV
      ACUMVAL1=ACUMVAL1+VALORJU
      @PROW(),52  SAY ACUMVAL+VALORJU PICT "999,999,999.99"
      JUR_ACUM=0
   ELSE
      LOOP
   ENDIF
   ACUMVAL=ACUMVAL+VALORJU
   LOOP
ENDDO

DO WHILE .T.
   IF DAY(DATAF) = DAY(FIM)
      IF JUR_ACUM <> 0
         @PROW()+1,5 SAY FIM
         @PROW(),20  SAY "Juros"
         VALORJU=ACUMVAL*JUR_ACUM/100
         @PROW(),30  SAY VALORJU         PICT "999,999,999.99"
         @PROW(),45  SAY TPMOV
         ACUMVAL1=ACUMVAL1+VALORJU
         @PROW(),52  SAY ACUMVAL+VALORJU PICT "999,999,999.99"
         JUR_ACUM=0
         ACUMVAL=ACUMVAL+VALORJU
      ENDIF
   ENDIF
   EXIT
ENDDO

@PROW()+2,20 SAY "Saldo Atualizado:"
@PROW(),52   SAY ACUMVAL PICT "999,999,999.99"
@PROW()+1,0  SAY REPL("-",75)
@PROW()+1,5  SAY "TOTAL DE VALOR ORIGINAL:"
@PROW(),32   SAY VALOR   PICT "999,999,999.99"
@PROW()+1,5  SAY "TOTAL DOS JUROS........:"
@PROW(),32   SAY ACUMVAL-VALOR PICT "999,999,999.99"
IF MULTA <> 0
   TOTMUL=0
   TOTMUL=ACUMVAL*MULTA/100
   @PROW()+1,5 SAY "TOTAL DA MULTA.........:"
   @PROW(),32  SAY TOTMUL PICT "999,999,999.99"
ENDIF
@PROW()+1,0  SAY REPL("-",75)
@PROW()+1,0  SAY "* = Lancamento de Movimento"

SETPRC(0,0)
SET DEVICE TO SCREEN
SET PRINTER TO
WIN(3,1,22,78,"DEMONSTRATIVO DE CALCULO DE JUROS","GR+/R","R*/W")
MOSTRA("EXTRA1.PRN")
ERASE EXTRA1.PRN
RETURN

*----------------------
PROCEDURE IMP_CLC_I        //   ENVIANDO P/ IMPRESSORA...
*----------------------
WIN(12,13,17,64,"AGUARDE!!! IMPRIMINDO...","GR+/N","N+/W")
FRAME(14,14,16,63)

arq_x ="C:\TEMP\"+LEFT(TIME(),2)+RIGHT(LEFT(TIME(),5),2)+RIGHT(TIME(),2)+"BA"
SET DEVICE TO PRINTER
SET PRINTER TO &arq_x

termom:= 53  / RECCOUNT()
porce := 100 / RECCOUNT()
control= 0

PAGINA=1

IF PROW() = 0
   @PROW()+1,0  SAY "ERASMO ANDRIOLI - PROGRAMADOR      *** SISTEMA BANK ***"
   @PROW()+1,0  SAY "DEMONSTRATIVO DE CALCULO"
   @PROW(),30   SAY DATE()
   @PROW(),40   SAY "-"
   @PROW(),42   SAY TIME()
   @PROW()+1,00 SAY REPL("-",75)
   @PROW()+1,00 SAY "TAXA DE JUROS MENSAL:"
   @PROW(),22   SAY JUROS_M PICT "99.999"
   @PROW(),28   SAY "%"
   @PROW(),39   SAY "OBS.: "+OBSERVA
   @PROW()+1,00 SAY "PERIODO DE..........: "+DTOC(INICIO)+" A "+DTOC(FIM)
   @PROW(),60   SAY "MULTA:"
   @PROW(),67   SAY MULTA PICT "99.99"
   @PROW(),72   SAY "%"
   @PROW()+1,00 SAY REPL("-",75)
ENDIF

DO WHILE .T.
   DO WHILE .T.
      MES = MONTH(DTINI1)
      DTINI1 = DTINI1 + 1
      JUR_ACUM = JUR_ACUM + JUROS_D
      IF MONTH(DTINI1) <> MES
         EXIT
      ELSE
         LOOP
      ENDIF
      EXIT
   ENDDO
   @PROW()+1,5 SAY "DATA           HISTORICO        VALORES                 SALDO"
   @PROW()+1,0 SAY REPL("-",75)
   @PROW()+1,5 SAY INICIO
   @PROW(),20  SAY "Movimento"
   @PROW(),34  SAY VALOR   PICT "999,999.99"
   @PROW(),45  SAY TPMOV
   @PROW(),47  SAY "*"
   @PROW(),52  SAY VALOR   PICT "999,999,999.99"
   VALORJU = VALOR * JUR_ACUM / 100
   @PROW()+1,5 SAY DTINI1 - 1   // Ultimo dia do Mes...
   @PROW(),20  SAY "Juros"
   @PROW(),34  SAY VALORJU PICT "999,999.99"
   @PROW(),45  SAY TPMOV
   ACUMVAL = VALOR + VALORJU
   @PROW(),52  SAY ACUMVAL PICT "999,999,999.99"
   EXIT
ENDDO

JUR_ACUM=0
DATAF=DTINI1-1

DO WHILE DATAF < FIM

   SET DEVICE TO SCREEN
   control++
   @15,15+(control*termom) SAY "±" COLOR("BG+/W")
   SET DEVICE TO PRINTER

   DATAF=DATAF+1
   MES=MONTH(DATAF+1)
   JUR_ACUM=JUR_ACUM + JUROS_D
   IF MONTH(DATAF) < MES .OR. MONTH(DATAF) > MES
      @PROW()+1,5 SAY DATAF
      @PROW(),20  SAY "Juros"
      VALORJU=ACUMVAL*JUR_ACUM/100
      @PROW(),34  SAY VALORJU  PICT "999,999.99"
      @PROW(),45  SAY TPMOV
      ACUMVAL1=ACUMVAL1+VALORJU
      @PROW(),52  SAY ACUMVAL+VALORJU PICT "999,999,999.99"
      JUR_ACUM=0
      IF PROW() = TLINPAG .OR. PROW() > TLINPAG
         @PROW()+1,0 SAY REPL("-",75)
         @PROW()+1,0 SAY eu+mfone
         @prow(),66  SAY "Pag.: "+ STRZERO(PAGINA,3,0)
         @prow()+1,0 SAY repl("-",75)
         PAGINA++
         SETPRC(0,0)
      ENDIF
   ELSE
      LOOP
   ENDIF
   ACUMVAL=ACUMVAL+VALORJU
   LOOP
ENDDO

DO WHILE .T.
   IF DAY(DATAF) = DAY(FIM)
      @PROW()+1,5 SAY FIM
      @PROW(),20  SAY "Juros"
      VALORJU=ACUMVAL*JUR_ACUM/100
      @PROW(),34  SAY VALORJU  PICT "999,999.99"
      @PROW(),45  SAY TPMOV
      ACUMVAL1=ACUMVAL1+VALORJU
      @PROW(),52  SAY ACUMVAL+VALORJU PICT "999,999,999.99"
      JUR_ACUM=0
      ACUMVAL=ACUMVAL+VALORJU
   ENDIF
   EXIT
ENDDO

IF PROW() = TLINPAG .OR. PROW() > TLINPAG
   @PROW()+1,0 SAY REPL("-",75)
   @PROW()+1,0 SAY eu+mfone
   @prow(),66  SAY "Pag.: "+ STRZERO(PAGINA,3,0)
   @prow()+1,0 SAY repl("-",75)
   PAGINA++
   SETPRC(0,0)
ENDIF

@PROW()+2,20 SAY "Saldo Atualizado:"
@PROW(),52   SAY ACUMVAL PICT "999,999,999.99"
@PROW()+1,0  SAY REPL("-",75)
@PROW()+1,5  SAY "TOTAL DE VALOR ORIGINAL:"
@PROW(),32   SAY VALOR   PICT "999,999,999.99"
@PROW()+1,5  SAY "TOTAL DOS JUROS........:"
@PROW(),32   SAY ACUMVAL-VALOR PICT "999,999,999.99"
IF MULTA <> 0
   TOTMUL=0
   TOTMUL=ACUMVAL*MULTA/100
   @PROW()+1,5 SAY "TOTAL DA MULTA.........:"
   @PROW(),32  SAY TOTMUL PICT "999,999,999.99"
ENDIF
@PROW()+1,0  SAY REPL("-",75)
@PROW()+1,0  SAY "* = Lancamento de Movimento"

DO WHILE PROW() < TLINPAG
   @PROW()+1,0 SAY ""
ENDDO

@PROW()+1,0 SAY REPL("-",75)
@PROW()+1,0 SAY eu+mfone
@prow(),66  SAY "Pag.: "+ STRZERO(PAGINA,3,0)
@prow()+1,0 SAY repl("-",75)

FIMIMP()
RETURN

Mui grato.

EANDRIOLI

CALCULO DE JUROS

Enviado: 05 Mar 2013 11:04
por Eolo
Andrioli, dá uma olhada no seguinte tópico:
https://pctoledo.org/forum/viewto ... 43&t=12365

Dei uma olhada rápida no código que vc postou e acho que o principal fundamento tá incorreto: achar a taxa de juro diária dividindo a taxa mensal por 30. Isso em juros compostos não funciona.

CALCULO DE JUROS

Enviado: 08 Mar 2013 19:58
por EANDRIOLI
EOLO, creio que voce esteja certo...

Mas poderia nos apresentar uma alteracao na rotina acima, em que possamos usar juros por exemplo, de 3% a.m. compostos, usando o que o programa pede, data inicial e final?

Assim por exemplo, posso calcular uma divida indo do dia 14/03/2013 até 18/07/2013. Veja que neste caso é necessário corrigir uma parte de dias do mes de março, 3 meses inteiros e mais uma parte dos dias do mes de julho.

Agradeço,

EANDRIOLI

CALCULO DE JUROS

Enviado: 09 Mar 2013 12:25
por Eolo
A resposta está no post que lhe passei, mas é em resumo o que segue.

Se vc tem 3% ao mês e quer corrigir um valor por 126 dias:

1. calcula a taxa equivalente a 1 dia
1,03^(1/30) -> 1,000985779 -> 0,0985779% ao dia
(ao invés de dividir 3% por 30 dias, calcula a raiz 30 de 3%)

2. a partir do resultado, calcula a taxa equivalente a 126 dias
1,000985779^126 -> 1,132182259 -> 13,2182259%

Se vc aplicar 0,095779% ao dia, juro sobre juro, por 126 dias, o resultado vai ser o mesmo se aplicar 13,1282259% sobre o valor inicial.

Da mesma forma, 0,0985779% ao dia, por 30 dias, composto, vai dar 3%.
Agora, se vc dividir 3% por 30 e aplicar os 0,10% por 30 dias, vai dar 3,04391%...

Eolo

CALCULO DE JUROS

Enviado: 09 Mar 2013 13:23
por Eolo
Veja que neste caso é necessário corrigir uma parte de dias do mes de março, 3 meses inteiros e mais uma parte dos dias do mes de julho.
Vc não precisa se preocupar com isso.
Faça DATA2 - DATA1 pra achar a quantidade de dias e eleve a taxa DIÁRIA a esse número de dias.

CALCULO DE JUROS

Enviado: 18 Mar 2013 22:24
por Netavin
Boa noite amigos.
Carlos colegas, sabendo-se a fórmula, o resto é apenas aplicá-la.
M=C(1+(i/100))^n

M= Valor corrigido(montante);
C=Valor inicial (capital);
i=taxa;
n=período.

[]

CALCULO DE JUROS

Enviado: 19 Mar 2013 08:42
por Eolo
Netavin,

Se eu tenho 5% ao mês e digamos 47 dias, é só aplicar a sua fórmula, direto?
M=C(1+(i/100))^n
-> M=C(1+(5/100))^47

Eu digo que não.

Essa sua fórmula só funciona se "i" for equivalente a "n", ou seja, por exemplo i=5% ao mês e n=número de meses, ou i=0,01% ao dia e n=número de dias etc.