Index: src/java/org/apache/poi/ss/formula/functions/MathX.java =================================================================== --- src/java/org/apache/poi/ss/formula/functions/MathX.java (revision 1611659) +++ src/java/org/apache/poi/ss/formula/functions/MathX.java (working copy) @@ -19,6 +19,8 @@ import org.apache.poi.ss.util.NumberToTextConverter; +import java.math.BigDecimal; + /** * @author Amol S. Deshmukh < amolweb at ya hoo dot com > * This class is an extension to the standard math library @@ -108,10 +110,9 @@ if (Double.isNaN(n) || Double.isInfinite(n)) { retval = Double.NaN; + } else { + retval = new BigDecimal(NumberToTextConverter.toText(n)).setScale(p, java.math.RoundingMode.DOWN).doubleValue(); } - else { - retval = java.math.BigDecimal.valueOf(n).setScale(p, java.math.RoundingMode.DOWN).doubleValue(); - } return retval; } Index: src/testcases/org/apache/poi/ss/formula/functions/TestMathX.java =================================================================== --- src/testcases/org/apache/poi/ss/formula/functions/TestMathX.java (revision 1611659) +++ src/testcases/org/apache/poi/ss/formula/functions/TestMathX.java (working copy) @@ -709,7 +709,13 @@ public void testRoundDown() { double d = 0; int p = 0; - + + d = 396d * 2.32d; p = 9; + assertEquals("roundDown ", 918.72d, MathX.roundDown(d, p)); + + d = 396d * 2.32d; p = 2; + assertEquals("roundDown ", 918.72d, MathX.roundDown(d, p)); + d = 0; p = 0; assertEquals("roundDown ", 0, MathX.roundDown(d, p)); @@ -753,25 +759,25 @@ assertEquals("roundDown ", 100, MathX.roundDown(d, p)); d = 0.049999999999999975d; p = 2; - assertEquals("round ", 0.04d, MathX.roundDown(d, p)); + assertEquals("roundDown ", 0.05d, MathX.roundDown(d, p)); d = 0.049999999999999975d; p = 1; - assertEquals("round ", 0.0d, MathX.roundDown(d, p)); + assertEquals("roundDown ", 0.0d, MathX.roundDown(d, p)); d = Double.NaN; p = 1; - assertEquals("round ", Double.NaN, MathX.roundDown(d, p)); + assertEquals("roundDown ", Double.NaN, MathX.roundDown(d, p)); d = Double.POSITIVE_INFINITY; p = 1; - assertEquals("round ", Double.NaN, MathX.roundDown(d, p)); + assertEquals("roundDown ", Double.NaN, MathX.roundDown(d, p)); d = Double.NEGATIVE_INFINITY; p = 1; - assertEquals("round ", Double.NaN, MathX.roundDown(d, p)); + assertEquals("roundDown ", Double.NaN, MathX.roundDown(d, p)); d = Double.MAX_VALUE; p = 1; - assertEquals("round ", Double.MAX_VALUE, MathX.roundDown(d, p)); + assertEquals("roundDown ", Double.MAX_VALUE, MathX.roundDown(d, p)); d = Double.MIN_VALUE; p = 1; - assertEquals("round ", 0.0d, MathX.roundDown(d, p)); + assertEquals("roundDown ", 0.0d, MathX.roundDown(d, p)); } public void testRoundUp() { Index: test-data/spreadsheet/FormulaEvalTestData.xls =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream