Author: centic
Date: Wed Dec 26 13:28:17 2018
New Revision: 1849764
URL: http://svn.apache.org/viewvc?rev=1849764&view=rev
Log:
Bug 62839: Adjust MathX.floor() to handle negative values the same
way as Excel/LibreOffice
Modified:
poi/trunk/src/java/org/apache/poi/ss/formula/functions/MathX.java
poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestMathX.java
poi/trunk/src/testcases/org/apache/poi/ss/usermodel/TestDataFormatter.java
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/functions/MathX.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/functions/MathX.java?rev=1849764&r1=1849763&r2=1849764&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/functions/MathX.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/functions/MathX.java Wed Dec
26 13:28:17 2018
@@ -125,22 +125,21 @@ final class MathX {
public static double average(double[] values) {
double ave = 0;
double sum = 0;
- for (int i=0, iSize=values.length; i<iSize; i++) {
- sum += values[i];
+ for (double value : values) {
+ sum += value;
}
ave = sum / values.length;
return ave;
}
-
/**
* sum of all values
* @param values
*/
public static double sum(double[] values) {
double sum = 0;
- for (int i=0, iSize=values.length; i<iSize; i++) {
- sum += values[i];
+ for (double value : values) {
+ sum += value;
}
return sum;
}
@@ -151,8 +150,8 @@ final class MathX {
*/
public static double sumsq(double[] values) {
double sumsq = 0;
- for (int i=0, iSize=values.length; i<iSize; i++) {
- sumsq += values[i]*values[i];
+ for (double value : values) {
+ sumsq += value * value;
}
return sumsq;
}
@@ -166,8 +165,8 @@ final class MathX {
double product = 0;
if (values!=null && values.length > 0) {
product = 1;
- for (int i=0, iSize=values.length; i<iSize; i++) {
- product *= values[i];
+ for (double value : values) {
+ product *= value;
}
}
return product;
@@ -180,8 +179,8 @@ final class MathX {
*/
public static double min(double[] values) {
double min = Double.POSITIVE_INFINITY;
- for (int i=0, iSize=values.length; i<iSize; i++) {
- min = Math.min(min, values[i]);
+ for (double value : values) {
+ min = Math.min(min, value);
}
return min;
}
@@ -193,8 +192,8 @@ final class MathX {
*/
public static double max(double[] values) {
double max = Double.NEGATIVE_INFINITY;
- for (int i=0, iSize=values.length; i<iSize; i++) {
- max = Math.max(max, values[i]);
+ for (double value : values) {
+ max = Math.max(max, value);
}
return max;
}
@@ -215,16 +214,11 @@ final class MathX {
* @param s
*/
public static double floor(double n, double s) {
- double f;
-
- if ((n<0 && s>0) || (n>0 && s<0) || (s==0 && n!=0)) {
- f = Double.NaN;
- }
- else {
- f = (n==0 || s==0) ? 0 : Math.floor(n/s) * s;
+ if (s==0 && n!=0) {
+ return Double.NaN;
+ } else {
+ return (n==0 || s==0) ? 0 : Math.floor(n/s) * s;
}
-
- return f;
}
/**
@@ -243,15 +237,11 @@ final class MathX {
* @param s
*/
public static double ceiling(double n, double s) {
- double c;
-
if (n>0 && s<0) {
- c = Double.NaN;
+ return Double.NaN;
} else {
- c = (n == 0 || s == 0) ? 0 : Math.ceil(n/s) * s;
+ return (n == 0 || s == 0) ? 0 : Math.ceil(n/s) * s;
}
-
- return c;
}
/**
@@ -300,19 +290,15 @@ final class MathX {
* @param d
*/
public static double mod(double n, double d) {
- double result = 0;
-
if (d == 0) {
- result = Double.NaN;
+ return Double.NaN;
}
else if (sign(n) == sign(d)) {
- result = n % d;
+ return n % d;
}
else {
- result = ((n % d) + d) % d;
+ return ((n % d) + d) % d;
}
-
- return result;
}
/**
@@ -396,5 +382,4 @@ final class MathX {
return d;
}
-
}
Modified:
poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestMathX.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestMathX.java?rev=1849764&r1=1849763&r2=1849764&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestMathX.java
(original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestMathX.java
Wed Dec 26 13:28:17 2018
@@ -27,6 +27,7 @@ import org.apache.poi.ss.formula.functio
* @author Amol S. Deshmukh < amolweb at ya hoo dot com >
*
*/
+@SuppressWarnings("ConstantConditions")
public class TestMathX extends AbstractNumericTestCase {
public void testAcosh() {
@@ -1000,5 +1001,10 @@ public class TestMathX extends AbstractN
assertEquals("floor ", 1.5, MathX.floor(d, s));
d = 0.234; s = 0.01;
assertEquals("floor ", 0.23, MathX.floor(d, s));
+
+ // see bug 62839
+ d = -123;
+ s = 10;
+ assertEquals("floor ", -130, MathX.floor(d, s));
}
}
Modified:
poi/trunk/src/testcases/org/apache/poi/ss/usermodel/TestDataFormatter.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/usermodel/TestDataFormatter.java?rev=1849764&r1=1849763&r2=1849764&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/usermodel/TestDataFormatter.java
(original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/usermodel/TestDataFormatter.java
Wed Dec 26 13:28:17 2018
@@ -925,4 +925,17 @@ public class TestDataFormatter {
assertEquals("4,33 " + euro, df.formatRawCellContents(4.33, 178,
formatString));
assertEquals("1.234,33 " + euro, df.formatRawCellContents(1234.33,
178, formatString));
}
+
+ @Test
+ public void testBug62839() {
+ Workbook wb = new HSSFWorkbook();
+ Sheet sheet = wb.createSheet();
+ Row row = sheet.createRow(0);
+ Cell cell = row.createCell(0);
+ cell.setCellFormula("FLOOR(-123,10)");
+ DataFormatter df = new DataFormatter(Locale.GERMANY);
+
+ String value = df.formatCellValue(cell,
wb.getCreationHelper().createFormulaEvaluator());
+ assertEquals("-130", value);
+ }
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]