Calcolare il tasso di interesse in Java (TVM)


Ho lavorato su un progetto Java che è una calcolatrice che può essere utilizzata per calcolare diversi scenari di interesse composto (molto simile alla funzione TVM trovata su una calcolatrice grafica come questa)

La funzione principale della calcolatrice è quella di calcolare i valori mancanti utilizzando i valori noti in una formula. Ho ottenuto tutte le formule funzionanti tranne quella che calcola il tasso di interesse (I )

Ho fatto alcuni ricerca e apparentemente non esiste una formula diritta per calcolare il tasso di interesse. Questo sito web: http://www.getobjects.com/Components/Finance/TVM/formulas.html mostra il metodo che devo usare, ma richiede una certa iterazione per trovare I usando tentativi ed errori. (Controlla il link, Scorri verso il basso fino alla voce "Tasso di interesse annuo")

Ecco la struttura che ho impostato per questo:

public static double calculateI(double N, double PV, double PMT, double FV, double PY){
    //method for calculating I goes here

    return I;
}

Non sono sicuro di come implementarlo, qualcuno potrebbe suggerire come questo può essere fatto o indicarmi nella giusta direzione?

Grazie in anticipo.


Ecco il mio codice dopo il suggerimento fatto da @ rocketboy

public static double formulaI(double ip, double N, double PV, double PMT, double FV, double PY){
    double I1=(PV*Math.pow((1+ip),N))+((PMT*1)*(Math.pow((1+ip),N))-1)+FV;
    return I1;
}
public static double calculateI(double N, double PV, double PMT, double FV, double PY){
    double ip=0;
    double res;
    do{
        res = formulaI(ip,N,PV,PMT,FV,PY);
        ip=ip+0.01;
        System.out.println(res);
    }while(res!=0);
    double I=ip*PY;
return I;
}
Author: Ortomala Lokni, 2013-08-12

1 answers

Prova qualcosa come:

double calculateI(/*all values for varialbles*/){
//definition;
}

Doppio.Valore di (d).uguale a(0,0);

long ip =0;
double res;

do{
   res = calculateI(ip, /*other constant values*/);
   ip++; /*Or you can increase ip according to your logic*/    
}while ( Double.valueOf(res).equals(0.0/*Expected result*/));

Edit: Devi gestire i casi limite. L'equazione potrebbe non convergere mai a 0.

 0
Author: rocketboy, 2013-08-12 08:54:16