Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does this math function return different values in Java and JavaScript?

This JavaScript code returns 115.3:

function FV(rate, nper, pmt, pv, type) {
    var pow = Math.pow(1 + rate, nper);
    var fv;
    if (rate) {
        fv = (pmt*(1+rate*type)*(1-pow)/rate)-pv*pow;
    } else {
        fv = -1 * (pv + pmt * nper);
    }
    return fv.toFixed(2);
}

document.write(   FV(0.06/12,12,-(2750+1375)/12,-0,0)-(0+2750+1375)    )

This Java code returns 106.1:

public double FV(double rate, double nper, double pmt, double pv, int type) {
    double pow = Math.pow(1 + rate, nper);
    double fv;        
    if (rate > 0) {
        fv = (pmt*(1+rate*type)*(1-pow)/rate)-pv*pow;
    } else {
        fv = -1 * (pv + pmt * nper);
    }
    return fv;
}
System.out.println(FV(0.06/12,12,-(2750+1375)/12,-0,0)-(0+2750+1375));

They look the same to me, but they return different values. What's wrong?

like image 490
SPatrickApps Avatar asked May 07 '15 16:05

SPatrickApps


1 Answers

In JavaScript -(2750+1375)/12 evaluates to -343.75. In Java it evaluates to -343, because in Java when you divide integer numbers, you get integer result. To fix this simply replace the expression with -(2750+1375)/12.0.

like image 192
Tagir Valeev Avatar answered Sep 29 '22 12:09

Tagir Valeev