aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDominik Stadler <centic@apache.org>2021-02-18 10:00:13 +0000
committerDominik Stadler <centic@apache.org>2021-02-18 10:00:13 +0000
commit297c16f1f017da4521d054b1fb942a7233098dec (patch)
treec439004a7fb373433d726b149f2095be0d1e3662 /src
parentb20ca985b810fa455550a7271cce7e1e21a65033 (diff)
downloadpoi-297c16f1f017da4521d054b1fb942a7233098dec.tar.gz
poi-297c16f1f017da4521d054b1fb942a7233098dec.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/java/org/apache/poi/ss/formula/functions/FinanceLib.java41
-rw-r--r--src/testcases/org/apache/poi/ss/formula/functions/TestFinanceLib.java23
2 files changed, 33 insertions, 31 deletions
diff --git a/src/java/org/apache/poi/ss/formula/functions/FinanceLib.java b/src/java/org/apache/poi/ss/formula/functions/FinanceLib.java
index 19a7510c68..dc4917f5e2 100644
--- a/src/java/org/apache/poi/ss/formula/functions/FinanceLib.java
+++ b/src/java/org/apache/poi/ss/formula/functions/FinanceLib.java
@@ -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 {
- double r1 = r + 1;
- retval = ( f + p * Math.pow(r1, n) ) * r
+ return -1*(f+p)/n;
+ } else {
+ double r1 = r + 1;
+ 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;
}
-
-
}
diff --git a/src/testcases/org/apache/poi/ss/formula/functions/TestFinanceLib.java b/src/testcases/org/apache/poi/ss/formula/functions/TestFinanceLib.java
index 958e4740bb..e0d2aca4c5 100644
--- a/src/testcases/org/apache/poi/ss/formula/functions/TestFinanceLib.java
+++ b/src/testcases/org/apache/poi/ss/formula/functions/TestFinanceLib.java
@@ -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);