mirror of https://github.com/apache/poi.git
FinanceLib: Simplify code and add a few more tests
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1886658 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b20ca985b8
commit
297c16f1f0
|
@ -74,17 +74,14 @@ public final class FinanceLib {
|
|||
* @param t type (true=pmt at beginning of period, false=pmt at end of period)
|
||||
*/
|
||||
public static double fv(double r, double n, double y, double p, boolean t) {
|
||||
double retval = 0;
|
||||
if (r == 0) {
|
||||
retval = -1*(p+(n*y));
|
||||
}
|
||||
else {
|
||||
return -1*(p+(n*y));
|
||||
} else {
|
||||
double r1 = r + 1;
|
||||
retval =((1-Math.pow(r1, n)) * (t ? r1 : 1) * y ) / r
|
||||
return ((1-Math.pow(r1, n)) * (t ? r1 : 1) * y ) / r
|
||||
-
|
||||
p*Math.pow(r1, n);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -99,17 +96,14 @@ public final class FinanceLib {
|
|||
* @param t type (true=pmt at beginning of period, false=pmt at end of period)
|
||||
*/
|
||||
public static double pv(double r, double n, double y, double f, boolean t) {
|
||||
double retval = 0;
|
||||
if (r == 0) {
|
||||
retval = -1*((n*y)+f);
|
||||
}
|
||||
else {
|
||||
return -1*((n*y)+f);
|
||||
} else {
|
||||
double r1 = r + 1;
|
||||
retval =(( ( 1 - Math.pow(r1, n) ) / r ) * (t ? r1 : 1) * y - f)
|
||||
return (( ( 1 - Math.pow(r1, n) ) / r ) * (t ? r1 : 1) * y - f)
|
||||
/
|
||||
Math.pow(r1, n);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -125,8 +119,8 @@ public final class FinanceLib {
|
|||
double npv = 0;
|
||||
double r1 = r + 1;
|
||||
double trate = r1;
|
||||
for (int i=0, iSize=cfs.length; i<iSize; i++) {
|
||||
npv += cfs[i] / trate;
|
||||
for (double cf : cfs) {
|
||||
npv += cf / trate;
|
||||
trate *= r1;
|
||||
}
|
||||
return npv;
|
||||
|
@ -141,17 +135,14 @@ public final class FinanceLib {
|
|||
* @param t type (true=pmt at beginning of period, false=pmt at end of period)
|
||||
*/
|
||||
public static double pmt(double r, double n, double p, double f, boolean t) {
|
||||
double retval = 0;
|
||||
if (r == 0) {
|
||||
retval = -1*(f+p)/n;
|
||||
}
|
||||
else {
|
||||
return -1*(f+p)/n;
|
||||
} else {
|
||||
double r1 = r + 1;
|
||||
retval = ( f + p * Math.pow(r1, n) ) * r
|
||||
return ( f + p * Math.pow(r1, n) ) * r
|
||||
/
|
||||
((t ? r1 : 1) * (1 - Math.pow(r1, n)));
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -163,9 +154,8 @@ public final class FinanceLib {
|
|||
* @param t type (true=pmt at beginning of period, false=pmt at end of period)
|
||||
*/
|
||||
public static double nper(double r, double y, double p, double f, boolean t) {
|
||||
double retval = 0;
|
||||
if (r == 0) {
|
||||
retval = -1 * (f + p) / y;
|
||||
return -1 * (f + p) / y;
|
||||
} else {
|
||||
double r1 = r + 1;
|
||||
double ryr = (t ? r1 : 1) * y / r;
|
||||
|
@ -176,10 +166,7 @@ public final class FinanceLib {
|
|||
? Math.log(-p - ryr)
|
||||
: Math.log(p + ryr);
|
||||
double a3 = Math.log(r1);
|
||||
retval = (a1 - a2) / a3;
|
||||
return (a1 - a2) / a3;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -33,7 +33,22 @@ class TestFinanceLib extends BaseTestNumeric {
|
|||
void testFv() {
|
||||
double f, r, y, p, x;
|
||||
int n;
|
||||
boolean t = false;
|
||||
boolean t;
|
||||
|
||||
r = 0; n = 1; y = 1; p = 1; t = true;
|
||||
f = FinanceLib.fv(r, n, y, p, t);
|
||||
x = -2;
|
||||
assertDouble("fv ", x, f);
|
||||
|
||||
r = 0.12/12; n = 12; y = -1000; p = 0; t = false;
|
||||
f = FinanceLib.fv(r, n, y, p, t);
|
||||
x = 12682.50301319;
|
||||
assertDouble("fv ", x, f);
|
||||
|
||||
r = 0.06/12; n = 10; y = -200; p = -500; t = true;
|
||||
f = FinanceLib.fv(r, n, y, p, t);
|
||||
x = 2581.4033740;
|
||||
assertDouble("fv ", x, f);
|
||||
|
||||
r = 0; n = 3; y = 2; p = 7; t = true;
|
||||
f = FinanceLib.fv(r, n, y, p, t);
|
||||
|
@ -105,7 +120,7 @@ class TestFinanceLib extends BaseTestNumeric {
|
|||
void testPmt() {
|
||||
double f, r, y, p, x;
|
||||
int n;
|
||||
boolean t = false;
|
||||
boolean t;
|
||||
|
||||
r = 0; n = 3; p = 2; f = 7; t = true;
|
||||
y = FinanceLib.pmt(r, n, p, f, t);
|
||||
|
@ -139,7 +154,7 @@ class TestFinanceLib extends BaseTestNumeric {
|
|||
void testPv() {
|
||||
double f, r, y, p, x;
|
||||
int n;
|
||||
boolean t = false;
|
||||
boolean t;
|
||||
|
||||
r = 0; n = 3; y = 2; f = 7; t = true;
|
||||
f = FinanceLib.pv(r, n, y, f, t);
|
||||
|
@ -182,7 +197,7 @@ class TestFinanceLib extends BaseTestNumeric {
|
|||
@Test
|
||||
void testNper() {
|
||||
double f, r, y, p, x, n;
|
||||
boolean t = false;
|
||||
boolean t;
|
||||
|
||||
r = 0; y = 7; p = 2; f = 3; t = false;
|
||||
n = FinanceLib.nper(r, y, p, f, t);
|
||||
|
|
Loading…
Reference in New Issue