]> source.dussan.org Git - poi.git/commitdiff
FinanceLib: Simplify code and add a few more tests
authorDominik Stadler <centic@apache.org>
Thu, 18 Feb 2021 10:00:13 +0000 (10:00 +0000)
committerDominik Stadler <centic@apache.org>
Thu, 18 Feb 2021 10:00:13 +0000 (10:00 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1886658 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/ss/formula/functions/FinanceLib.java
src/testcases/org/apache/poi/ss/formula/functions/TestFinanceLib.java

index 19a7510c6823a9097feaa9c586d0688bb03b80ba..dc4917f5e293802ea8770abddfe025874af6ad19 100644 (file)
@@ -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;
     }
-
-
 }
index 958e4740bbd278850c1f50fa6e34bba44aabb735..e0d2aca4c58f326fa1ef88c0e82ba72ac4dab0ce 100644 (file)
@@ -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);