9
Dieser JavaScript-Code liefert 115,3:Warum gibt diese mathematische Funktion in Java und JavaScript unterschiedliche Werte zurück?
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) )
Diese Java-Code gibt 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));
Sie sehen gleich zu mir, aber sie kehren unterschiedliche Werte. Was ist los mit dir?
Der Standardtyp der Java-'Integer'-Literale' int' und int devision runden den Wert ab. während in Javascript devision operator Rückgabewert dynamisch, z. '1/2 // gibt 0.5 in JavaScript zurück und' 1/2 // gibt in Java 0 zurück –
@SubhrajyotiMajumder Ganzzahlige Division rundet auf Null ab. Die [JLS] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17.2) sagt das dazu: 'Ganzzahlige Division läuft auf 0. Das ist, ist der Quotient, der für die Operanden n und d erzeugt wird, die nach binärer numerischer Heraufstufung ganze Zahlen sind (§5.6.2), ein ganzzahliger Wert q, dessen Größe so groß wie möglich ist, während | d · q | ≤ | n |. Außerdem ist q positiv, wenn | n | ≥ | d | und n und d haben das gleiche Vorzeichen, aber q ist negativ, wenn | n | ≥ | d | und n und d haben entgegengesetzte Vorzeichen. – mkobit
Ich sage das gleiche @ kobit –