Author: fanningpj
Date: Tue Oct 20 16:07:10 2020
New Revision: 1882706

URL: http://svn.apache.org/viewvc?rev=1882706&view=rev
Log:
[github-193] Change TRUNC implementation to use MathX. Thanks to Jacob Harris. 
This closes #193

Modified:
    poi/trunk/src/java/org/apache/poi/ss/formula/functions/NumericFunction.java
    poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestTrunc.java

Modified: 
poi/trunk/src/java/org/apache/poi/ss/formula/functions/NumericFunction.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/functions/NumericFunction.java?rev=1882706&r1=1882705&r2=1882706&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/functions/NumericFunction.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/functions/NumericFunction.java 
Tue Oct 20 16:07:10 2020
@@ -330,9 +330,7 @@ public abstract class NumericFunction im
                        try {
                                double d0 = singleOperandEvaluate(arg0, 
srcRowIndex, srcColumnIndex);
                                double d1 = singleOperandEvaluate(arg1, 
srcRowIndex, srcColumnIndex);
-                               double multi = Math.pow(10d,d1);
-                               if(d0 < 0) result = -Math.floor(-d0 * multi) / 
multi;
-                else result = Math.floor(d0 * multi) / multi;
+                               result = MathX.roundDown(d0, (int)d1);
                                checkValue(result);
                        }catch (EvaluationException e) {
                                return e.getErrorEval();

Modified: 
poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestTrunc.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestTrunc.java?rev=1882706&r1=1882705&r2=1882706&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestTrunc.java 
(original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestTrunc.java 
Tue Oct 20 16:07:10 2020
@@ -58,6 +58,21 @@ public final class TestTrunc extends Bas
        }
 
        @Test
+       public void testTruncWithProblematicDecimalNumber() {
+               ValueEval[] args = { new NumberEval(0.29), new NumberEval(2) };
+               ValueEval result = NumericFunction.TRUNC.evaluate(args, -1, 
(short)-1);
+               assertEquals("TRUNC", (new NumberEval(0.29d)).getNumberValue(), 
((NumberEval)result).getNumberValue());
+       }
+
+       @Test
+       public void testTruncWithProblematicCalculationResult() {
+
+               ValueEval[] args = { new NumberEval(21.624d / 24d + .009d), new 
NumberEval(2) };
+               ValueEval result = NumericFunction.TRUNC.evaluate(args, -1, 
(short)-1);
+               assertEquals("TRUNC", (new NumberEval(0.91d)).getNumberValue(), 
((NumberEval)result).getNumberValue());
+       }
+
+       @Test
        public void testTruncWithDecimalNumberOneArg() {
                ValueEval[] args = { new NumberEval(2.612777) };
                ValueEval result = NumericFunction.TRUNC.evaluate(args, -1, 
(short)-1);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to