You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2022/05/28 18:35:56 UTC
svn commit: r1901366 - in /poi/trunk/poi/src: main/java/org/apache/poi/ss/formula/atp/ main/java/org/apache/poi/ss/formula/functions/ test/java/org/apache/poi/ss/formula/functions/
Author: fanningpj
Date: Sat May 28 18:35:56 2022
New Revision: 1901366
URL: http://svn.apache.org/viewvc?rev=1901366&view=rev
Log:
[bug-66097] support FLOOR.PRECISE function
Added:
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/FloorPrecise.java
- copied, changed from r1901195, poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/FloorMath.java
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloorPrecise.java
- copied, changed from r1901195, poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloorMath.java
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/Days.java
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestDays.java
Modified: poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java?rev=1901366&r1=1901365&r2=1901366&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java Sat May 28 18:35:56 2022
@@ -114,6 +114,7 @@ public final class AnalysisToolPak imple
r(m, "ERFC", null);
r(m, "FACTDOUBLE", FactDouble.instance);
r(m, "FLOOR.MATH", FloorMath.instance);
+ r(m, "FLOOR.PRECISE", FloorPrecise.instance);
r(m, "FVSCHEDULE", null);
r(m, "GCD", Gcd.instance);
r(m, "GESTEP", null);
Modified: poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/Days.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/Days.java?rev=1901366&r1=1901365&r2=1901366&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/Days.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/Days.java Sat May 28 18:35:56 2022
@@ -21,6 +21,7 @@ import java.time.temporal.ChronoUnit;
import java.util.Date;
import org.apache.poi.ss.formula.OperationEvaluationContext;
+import org.apache.poi.ss.formula.eval.ErrorEval;
import org.apache.poi.ss.formula.eval.EvaluationException;
import org.apache.poi.ss.formula.eval.NumberEval;
import org.apache.poi.ss.formula.eval.OperandResolver;
@@ -54,6 +55,9 @@ public class Days implements FreeRefFunc
@Override
public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
+ if (args.length != 2) {
+ return ErrorEval.VALUE_INVALID;
+ }
return evaluate(ec.getRowIndex(), ec.getColumnIndex(), args[0], args[1]);
}
Copied: poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/FloorPrecise.java (from r1901195, poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/FloorMath.java)
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/FloorPrecise.java?p2=poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/FloorPrecise.java&p1=poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/FloorMath.java&r1=1901195&r2=1901366&rev=1901366&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/FloorMath.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/FloorPrecise.java Sat May 28 18:35:56 2022
@@ -29,16 +29,16 @@ import java.math.RoundingMode;
import static org.apache.poi.ss.formula.functions.MathX.scaledRoundUsingBigDecimal;
/**
- * Implementation for Excel FLOOR.MATH() function.
+ * Implementation for Excel FLOOR.PRECISE() function.
* <ul>
- * <li>https://support.microsoft.com/en-us/office/floor-math-function-c302b599-fbdb-4177-ba19-2c2b1249a2f5</li>
+ * <li>https://support.microsoft.com/en-us/office/floor-precise-function-f769b468-1452-4617-8dc3-02f842a0702e</li>
* </ul>
*/
-public final class FloorMath implements FreeRefFunction {
+public final class FloorPrecise implements FreeRefFunction {
- public static final FloorMath instance = new FloorMath();
+ public static final FloorPrecise instance = new FloorPrecise();
- private FloorMath() {}
+ private FloorPrecise() {}
@Override
public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
@@ -53,19 +53,7 @@ public final class FloorMath implements
double multiplier = 1.0;
if (args.length > 1) {
Double arg1Val = evaluateValue(args[1], ec.getRowIndex(), ec.getColumnIndex());
- multiplier = arg1Val != null ? arg1Val.doubleValue() : 1.0;
- }
- boolean roundNegativeNumsDown = false;
- if (args.length > 2) {
- Double arg2Val = evaluateValue(args[2], ec.getRowIndex(), ec.getColumnIndex());
- roundNegativeNumsDown = arg2Val != null && arg2Val.doubleValue() < 0.0;
- }
- if (roundNegativeNumsDown && xval < 0.0) {
- if (multiplier != 1.0) {
- RoundingMode mode = multiplier < 0.0 ? RoundingMode.FLOOR : RoundingMode.CEILING;
- return new NumberEval(scaledRoundUsingBigDecimal(xval, multiplier, mode));
- }
- return new NumberEval(Math.ceil(xval));
+ multiplier = arg1Val != null ? Math.abs(arg1Val.doubleValue()) : 1.0;
}
if (multiplier != 1.0) {
RoundingMode mode = multiplier < 0.0 ? RoundingMode.CEILING : RoundingMode.FLOOR;
Modified: poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestDays.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestDays.java?rev=1901366&r1=1901365&r2=1901366&view=diff
==============================================================================
--- poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestDays.java (original)
+++ poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestDays.java Sat May 28 18:35:56 2022
@@ -56,6 +56,7 @@ public class TestDays {
HSSFCell cell = wb.getSheetAt(0).getRow(0).createCell(12);
assertError(fe, cell, "DAYS(\"15-XYZ\",\"1-FEB-2021\")", FormulaError.VALUE);
assertError(fe, cell, "DAYS(\"15-MAR-2021\",\"1-XYZ\")", FormulaError.VALUE);
+ assertError(fe, cell, "DAYS(\"15-MAR-2021\")", FormulaError.VALUE);
}
}
Copied: poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloorPrecise.java (from r1901195, poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloorMath.java)
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloorPrecise.java?p2=poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloorPrecise.java&p1=poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloorMath.java&r1=1901195&r2=1901366&rev=1901366&view=diff
==============================================================================
--- poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloorMath.java (original)
+++ poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloorPrecise.java Sat May 28 18:35:56 2022
@@ -31,11 +31,11 @@ import static org.apache.poi.ss.util.Uti
import static org.apache.poi.ss.util.Utils.assertError;
/**
- * Tests for {@link FloorMath}
+ * Tests for {@link FloorPrecise}
*/
-final class TestFloorMath {
+final class TestFloorPrecise {
- //https://support.microsoft.com/en-us/office/floor-math-function-c302b599-fbdb-4177-ba19-2c2b1249a2f5
+ //https://support.microsoft.com/en-us/office/floor-precise-function-f769b468-1452-4617-8dc3-02f842a0702e
@Test
void testMicrosoftExamples() throws IOException {
try (HSSFWorkbook wb = new HSSFWorkbook()) {
@@ -43,15 +43,11 @@ final class TestFloorMath {
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
- assertDouble(fe, cell, "FLOOR.MATH(24.3,5)", 20.0, 0.00000000000001);
- assertDouble(fe, cell, "FLOOR.MATH(6.7)", 6.0, 0.00000000000001);
- assertDouble(fe, cell, "FLOOR.MATH(-8.1,2)", -10.0, 0.00000000000001);
- assertDouble(fe, cell, "FLOOR.MATH(-5.5,2,-1)", -4.0, 0.00000000000001);
-
- assertDouble(fe, cell, "FLOOR.MATH(-2.5,-2)", -4.0, 0.00000000000001);
- assertDouble(fe, cell, "FLOOR.MATH(-2.5,-2,-1)", -2.0, 0.00000000000001);
- assertDouble(fe, cell, "FLOOR.MATH(2.5,-2)", 2.0, 0.00000000000001);
- assertDouble(fe, cell, "FLOOR.MATH(0.234,0.01)", 0.23, 0.00000000000001);
+ assertDouble(fe, cell, "FLOOR.PRECISE(-3.2,-1)", -4, 0.00000000000001);
+ assertDouble(fe, cell, "FLOOR.PRECISE(3.2,1)", 3, 0.00000000000001);
+ assertDouble(fe, cell, "FLOOR.PRECISE(-3.2,1)", -4, 0.00000000000001);
+ assertDouble(fe, cell, "FLOOR.PRECISE(3.2,-1)", 3, 0.00000000000001);
+ assertDouble(fe, cell, "FLOOR.PRECISE(3.2)", 3, 0.00000000000001);
}
}
@@ -62,7 +58,7 @@ final class TestFloorMath {
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
- assertError(fe, cell, "FLOOR.MATH()", FormulaError.VALUE);
+ assertError(fe, cell, "FLOOR.PRECISE()", FormulaError.VALUE);
}
}
@@ -73,7 +69,7 @@ final class TestFloorMath {
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
- assertError(fe, cell, "FLOOR.MATH(\"abc\")", FormulaError.VALUE);
+ assertError(fe, cell, "FLOOR.PRECISE(\"abc\")", FormulaError.VALUE);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org