diff options
author | Dominik Stadler <centic@apache.org> | 2021-02-18 10:00:13 +0000 |
---|---|---|
committer | Dominik Stadler <centic@apache.org> | 2021-02-18 10:00:13 +0000 |
commit | 297c16f1f017da4521d054b1fb942a7233098dec (patch) | |
tree | c439004a7fb373433d726b149f2095be0d1e3662 /src | |
parent | b20ca985b810fa455550a7271cce7e1e21a65033 (diff) | |
download | poi-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.java | 41 | ||||
-rw-r--r-- | src/testcases/org/apache/poi/ss/formula/functions/TestFinanceLib.java | 23 |
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); |