Arquivos mensais: novembro 2010

Calcular tabela Price em PHP (PGTO no Excel)

Um cliente me solicitou um sistema para simulação de emprestimos, até ae tudo bem. Me enviou uma planilha na qual estava  uma simulação utilizando a famosa tabela price, para isso usava uma função no EXCEL que é denominada PGTO. Esta função basicamente faz todos os calculos necessários para determinar o valor da parcela mensal a ser paga.

Mas como em PHP não existe esta função PGTO, mãos a massa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Funcao para Calcular valor da Parcela - Tabela Price

function Price($Valor, $Parcelas, $Juros) {

$Juros = bcdiv($Juros,100,15);
$E=1.0;
$cont=1.0;

for($k=1;$k<=$Parcelas;$k++)
{
$cont= bcmul($cont,bcadd($Juros,1,15),15);
$E=bcadd($E,$cont,15);
}
$E=bcsub($E,$cont,15);

$Valor = bcmul($Valor,$cont,15);
return bcdiv($Valor,$E,15);
}

// Exemplo de utilização
echo Price($Valor, $Parcelas, $Juros);

Encontrei a solução na iMasters Fóruns (em um post bem antigo por sinal), que por sua vez estava escrita em C++, apenas tive o trabalho de converter para PHP. Usei sempre os operadores matemáticos BC do PHP, para arbitrariamente utilizar até 15 casas decimais nos cálculos.

Para quem quiser conferir ou apenas conhecer por curiosidade o calculo, segue abaixo:

x=C*((1+i)^n)/ somatoria de (1+i)^k para k=0 ate k = n-1

Sendo: C = Valor, n = Parcelas, i = Juros

Agradecimento aos meus colaboradores Magno e Daniel da Brainatwork, que ficaram pentelhando e dando palpites durante a conversão da função