From ec16fc9218ca16fc39cb7c68280ea6311f9d0805 Mon Sep 17 00:00:00 2001 From: Josh Micich Date: Fri, 22 May 2009 06:25:58 +0000 Subject: [PATCH] Bugzilla 47198 - Fixed formula evaluator comparison of -0.0 and 0.0 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@777392 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/changes.xml | 1 + src/documentation/content/xdocs/status.xml | 1 + .../formula/eval/RelationalOperationEval.java | 4 ++++ .../hssf/record/formula/eval/TestEqualEval.java | 14 ++++++++++++++ 4 files changed, 20 insertions(+) diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml index 4411ea6f6e..2549d2c287 100644 --- a/src/documentation/content/xdocs/changes.xml +++ b/src/documentation/content/xdocs/changes.xml @@ -37,6 +37,7 @@ + 47198 - Fixed formula evaluator comparison of -0.0 and 0.0 47229 - Fixed ExternalNameRecord to handle DDE links 46287 - Control of header and footer extraction in ExcelExtractor / XSSFExcelExtractor 46554 - New ant target "jar-examples" diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index b46e086a67..5486266da6 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 47198 - Fixed formula evaluator comparison of -0.0 and 0.0 47229 - Fixed ExternalNameRecord to handle DDE links 46287 - Control of header and footer extraction in ExcelExtractor / XSSFExcelExtractor 46554 - New ant target "jar-examples" diff --git a/src/java/org/apache/poi/hssf/record/formula/eval/RelationalOperationEval.java b/src/java/org/apache/poi/hssf/record/formula/eval/RelationalOperationEval.java index 9dee4bc1e0..d5eef3e265 100644 --- a/src/java/org/apache/poi/hssf/record/formula/eval/RelationalOperationEval.java +++ b/src/java/org/apache/poi/hssf/record/formula/eval/RelationalOperationEval.java @@ -108,6 +108,10 @@ public abstract class RelationalOperationEval implements OperationEval { if (vb instanceof NumberEval) { NumberEval nA = (NumberEval) va; NumberEval nB = (NumberEval) vb; + if (nA.getNumberValue() == nB.getNumberValue()) { + // Excel considers -0.0 == 0.0 which is different to Double.compare() + return 0; + } return Double.compare(nA.getNumberValue(), nB.getNumberValue()); } } diff --git a/src/testcases/org/apache/poi/hssf/record/formula/eval/TestEqualEval.java b/src/testcases/org/apache/poi/hssf/record/formula/eval/TestEqualEval.java index 3a027bb2e9..3053660b70 100644 --- a/src/testcases/org/apache/poi/hssf/record/formula/eval/TestEqualEval.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/eval/TestEqualEval.java @@ -91,4 +91,18 @@ public final class TestEqualEval extends TestCase { BoolEval be = (BoolEval) result; return be.getBooleanValue(); } + + /** + * Excel considers -0.0 to be equal to 0.0 + */ + public void testZeroEquality_bug47198() { + NumberEval zero = new NumberEval(0.0); + NumberEval mZero = (NumberEval) UnaryMinusEval.instance.evaluate(new Eval[] { zero, }, 0, + (short) 0); + Eval[] args = { zero, mZero, }; + BoolEval result = (BoolEval) EqualEval.instance.evaluate(args, 0, (short) 0); + if (!result.getBooleanValue()) { + throw new AssertionFailedError("Identified bug 47198: -0.0 != 0.0"); + } + } } -- 2.39.5