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:42:33 UTC
svn commit: r1901367 - 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:42:32 2022
New Revision: 1901367
URL: http://svn.apache.org/viewvc?rev=1901367&view=rev
Log:
[bug-66097] support CEILING.PRECISE function
Added:
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/CeilingPrecise.java
- copied, changed from r1901195, poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/CeilingMath.java
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestCeilingPrecise.java
- copied, changed from r1901366, poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloorPrecise.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/FloorPrecise.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=1901367&r1=1901366&r2=1901367&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:42:32 2022
@@ -80,6 +80,7 @@ public final class AnalysisToolPak imple
r(m, "BIN2OCT", null);
r(m, "COMPLEX", Complex.instance);
r(m, "CEILING.MATH", CeilingMath.instance);
+ r(m, "CEILING.PRECISE", CeilingPrecise.instance);
r(m, "CONCAT", TextFunction.CONCAT);
r(m, "CONVERT", null);
r(m, "COUNTIFS", Countifs.instance);
Copied: poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/CeilingPrecise.java (from r1901195, poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/CeilingMath.java)
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/CeilingPrecise.java?p2=poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/CeilingPrecise.java&p1=poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/CeilingMath.java&r1=1901195&r2=1901367&rev=1901367&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/CeilingMath.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/CeilingPrecise.java Sat May 28 18:42:32 2022
@@ -29,16 +29,16 @@ import java.math.RoundingMode;
import static org.apache.poi.ss.formula.functions.MathX.scaledRoundUsingBigDecimal;
/**
- * Implementation for Excel CEILING.MATH() function.
+ * Implementation for Excel CEILING.PRECISE() function.
* <ul>
- * <li>https://support.microsoft.com/en-us/office/ceiling-math-function-80f95d2f-b499-4eee-9f16-f795a8e306c8</li>
+ * <li>https://support.microsoft.com/en-us/office/ceiling-precise-function-f366a774-527a-4c92-ba49-af0a196e66cb</li>
* </ul>
*/
-public final class CeilingMath implements FreeRefFunction {
+public final class CeilingPrecise implements FreeRefFunction {
- public static final CeilingMath instance = new CeilingMath();
+ public static final CeilingPrecise instance = new CeilingPrecise();
- private CeilingMath() {}
+ private CeilingPrecise() {}
@Override
public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
@@ -53,23 +53,10 @@ public final class CeilingMath implement
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.CEILING : RoundingMode.FLOOR;
- return new NumberEval(scaledRoundUsingBigDecimal(xval, multiplier, mode));
- }
- return new NumberEval(Math.floor(xval));
+ multiplier = arg1Val != null ? Math.abs(arg1Val.doubleValue()) : 1.0;
}
if (multiplier != 1.0) {
- RoundingMode mode = multiplier < 0.0 ? RoundingMode.FLOOR : RoundingMode.CEILING;
- return new NumberEval(scaledRoundUsingBigDecimal(xval, multiplier, mode));
+ return new NumberEval(scaledRoundUsingBigDecimal(xval, multiplier, RoundingMode.CEILING));
}
return new NumberEval(Math.ceil(xval));
} catch (EvaluationException evaluationException) {
Modified: poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/FloorPrecise.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/FloorPrecise.java?rev=1901367&r1=1901366&r2=1901367&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/FloorPrecise.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/FloorPrecise.java Sat May 28 18:42:32 2022
@@ -56,8 +56,7 @@ public final class FloorPrecise implemen
multiplier = arg1Val != null ? Math.abs(arg1Val.doubleValue()) : 1.0;
}
if (multiplier != 1.0) {
- RoundingMode mode = multiplier < 0.0 ? RoundingMode.CEILING : RoundingMode.FLOOR;
- return new NumberEval(scaledRoundUsingBigDecimal(xval, multiplier, mode));
+ return new NumberEval(scaledRoundUsingBigDecimal(xval, multiplier, RoundingMode.FLOOR));
}
return new NumberEval(Math.floor(xval));
} catch (EvaluationException evaluationException) {
Copied: poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestCeilingPrecise.java (from r1901366, poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloorPrecise.java)
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestCeilingPrecise.java?p2=poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestCeilingPrecise.java&p1=poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloorPrecise.java&r1=1901366&r2=1901367&rev=1901367&view=diff
==============================================================================
--- poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloorPrecise.java (original)
+++ poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestCeilingPrecise.java Sat May 28 18:42:32 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 FloorPrecise}
+ * Tests for {@link CeilingPrecise}
*/
-final class TestFloorPrecise {
+final class TestCeilingPrecise {
- //https://support.microsoft.com/en-us/office/floor-precise-function-f769b468-1452-4617-8dc3-02f842a0702e
+ //https://support.microsoft.com/en-us/office/ceiling-precise-function-f366a774-527a-4c92-ba49-af0a196e66cb
@Test
void testMicrosoftExamples() throws IOException {
try (HSSFWorkbook wb = new HSSFWorkbook()) {
@@ -43,11 +43,12 @@ final class TestFloorPrecise {
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
- 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);
+ assertDouble(fe, cell, "CEILING.PRECISE(4.3)", 5, 0.00000000000001);
+ assertDouble(fe, cell, "CEILING.PRECISE(-4.3)", -4, 0.00000000000001);
+ assertDouble(fe, cell, "CEILING.PRECISE(4.3,2)", 6, 0.00000000000001);
+ assertDouble(fe, cell, "CEILING.PRECISE(4.3,-2)", 6, 0.00000000000001);
+ assertDouble(fe, cell, "CEILING.PRECISE(-4.3,2)", -4, 0.00000000000001);
+ assertDouble(fe, cell, "CEILING.PRECISE(-4.3,-2)", -4, 0.00000000000001);
}
}
@@ -58,7 +59,7 @@ final class TestFloorPrecise {
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
- assertError(fe, cell, "FLOOR.PRECISE()", FormulaError.VALUE);
+ assertError(fe, cell, "CEILING.PRECISE()", FormulaError.VALUE);
}
}
@@ -69,7 +70,7 @@ final class TestFloorPrecise {
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
- assertError(fe, cell, "FLOOR.PRECISE(\"abc\")", FormulaError.VALUE);
+ assertError(fe, cell, "CEILING.PRECISE(\"abc\")", FormulaError.VALUE);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org