Alguém sabe qual é o algoritmo da função TAXA do Excel? Se souber em Java também agradeço.
Função TAXA
Retorna a taxa de juros por período de uma anuidade. TAXA é calculado por iteração e pode ter zero ou mais soluções. Se os resultados sucessivos de TAXA não convergirem para 0,0000001 depois de 20 iterações, TAXA retornará o valor de erro #NÚM!.
Sintaxe
TAXA(nper;pgto;vp;vf;tipo;estimativa)
Nper é o número total de períodos de pagamento em uma anuidade.
Pgto é o pagamento feito em cada período e não pode mudar durante a vigência da anuidade. Geralmente, pgto inclui o principal e os juros e nenhuma outra taxa ou tributo. Se pgto for omitido, você deverá incluir o argumento vf.
Vp é o valor presente ? o valor total correspondente ao valor atual de uma série de pagamentos futuros.
Vf é o valor futuro, ou o saldo, que você deseja obter depois do último pagamento. Se vf for omitido, será considerado 0 (o valor futuro de um empréstimo, por exemplo, é 0).
Tipo é o número 0 ou 1 e indica as datas de vencimento.
Estimativa é a sua estimativa para a taxa. (Se você omitir estimativa, este argumento será considerado 10%)
Para vc receber ajuda, é melhor tentar montar o algoritmo e ir postando suas dúvidas…vc já tem a regra ae, é só começar a fazer…ng vai te entregar pronto!
T
thaiscf
A questão é que eu não tenho justamente o algoritmo. Se eu tivesse o algoritmo conseguiria desenvolvê-lo em Java.
T
Tiburcio_Mancha
Bom, vc tem que desenvolver uma função que te retorne numa taxa de juros de um determinado período, então, isso é matemática finaneceira, e retirei essa fórmula da wikipédia:
FV = PV(1 + i)ª
FV: Valor Futuro (do inglês Future Value)
PV: Valor Presente (do inglês Present Value)
i: Taxa de juros (do inglês Interest Rate)
ª: Número de períodos
E
entanglement
O cálculo dessa taxa é bem mais complicado que parece, porque envolve resolver uma equação para a taxa, usando um método de aproximações sucessivas.
Procure por “IRR Calculation Java” no Google.
É que o método TAXA do Excel (que é a Taxa Interna de Retorno ou “Internal Return Rate” ) trabalha na verdade com pagamentos de valores desiguais, dados em um intervalo de células. Portanto a fórmula que o Tibúrcio apresentou simplesmente não é suficiente.
T
thaiscf
Obrigada! Vou pesquisar
R
rwolosker
essa classe calcula a taxa de retorno.
/**********************************************************TAXA DE RETORNO**********************************************************/packageteste;importjava.math.BigDecimal;importjava.math.RoundingMode;importjava.util.Date;importjava.util.List;importrwk.util.Format;publicclassDia{privateDatezero;privateDatedata;privateBigDecimalvalor;privateBigDecimaldias;/*======================================================= =======================================================*/publicDategetZero(){returnzero;}publicvoidsetZero(Datezero){this.zero=zero;}publicDategetData(){returndata;}publicvoidsetData(Datedata){this.data=data;}publicBigDecimalgetValor(){returnvalor;}publicvoidsetValor(BigDecimalvalor){this.valor=valor;}publicBigDecimalgetDias(){returndias;}publicvoidsetDias(BigDecimaldias){this.dias=dias;}/*======================================================= =======================================================*/publicstaticDiacreate(Datezero,Datedata,doublevalor){Diadia=newDia();dia.setData(data);dia.setZero(zero);dia.setValor(BigDecimal.valueOf(valor));dia.setDias(BigDecimal.valueOf(Format.dateDiff(data,zero)));returndia;}/*======================================================= =======================================================*/publicBigDecimalvalorPresente(BigDecimaltaxa){returnvalor.divide(BigDecimal.ONE.add(taxa).pow(dias.intValue()),10,RoundingMode.FLOOR);}/*======================================================= =======================================================*/publicDiainverte(){valor=valor.multiply(BigDecimal.valueOf(-1));returnthis;}/*======================================================= =======================================================*/publicstaticBigDecimaltaxaRetorno(List<Dia>dias){Diaultimo=dias.get(dias.size()-1);BigDecimaltaxa=BigDecimal.ZERO;BigDecimalsomatorio;BigDecimalpasso,limite;ultimo.inverte();somatorio=BigDecimal.ZERO;for(Diadia:dias)somatorio=somatorio.add(dia.valorPresente(taxa));passo=BigDecimal.valueOf(somatorio.doubleValue()>=0?-0.000001:+0.000001);limite=BigDecimal.valueOf(somatorio.doubleValue()>=0?-1:+1);while(true){taxa=taxa.add(passo);somatorio=BigDecimal.ZERO;for(Diadia:dias)somatorio=somatorio.add(dia.valorPresente(taxa));if(somatorio.multiply(limite).doubleValue()>0)returntaxa;//ao dia}}/*======================================================= =======================================================*/publicstaticBigDecimaltaxaAoMes(BigDecimaltaxa){returntaxa.add(BigDecimal.ONE).pow(30).subtract(BigDecimal.ONE);}}