Hi guys,
Just wanted to check something. I have the following function below which is the equivalent of the RATE function in Excel
In Excel, if I do the following in any cell: =RATE(68, -118161.59, 4146470.27) - it gives me: 2.2014989%
However, the below code gives me: 0.0220150136..
I am expecting it to give me 0.0022014989
It is only marginally out, but can anyone point me why it is marginally out?
Any help would be much appreciated
public static void main(String[] args) { double rate1 = Financials.rate(68, 118161.59, 4146470.27); System.out.println(rate1); System.out.println("finished"); }public static double rate(double nper, double pmt, double pv) { double error = 0.0000001; double high = 1.00; double low = 0.00; double rate = (2.0 * (nper * pmt - pv)) / (pv * nper); while(true) { // check for error margin double calc = Math.pow(1 + rate, nper); calc = (rate * calc) / (calc - 1.0); calc -= pmt / pv; if (calc > error) { // guess too high, lower the guess high = rate; rate = (high + low) / 2; } else if (calc < -error) { // guess too low, higher the guess low = rate; rate = (high + low) / 2; } else { // acceptable guess break; } } //System.out.println("Rate : "+rate); return rate; }