mirror of https://github.com/apache/poi.git
[github-193] Change TRUNC implementation to use MathX. Thanks to Jacob Harris. This closes #193
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1882706 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ccad1fc86e
commit
dd9f132c23
|
@ -330,9 +330,7 @@ public abstract class NumericFunction implements Function {
|
||||||
try {
|
try {
|
||||||
double d0 = singleOperandEvaluate(arg0, srcRowIndex, srcColumnIndex);
|
double d0 = singleOperandEvaluate(arg0, srcRowIndex, srcColumnIndex);
|
||||||
double d1 = singleOperandEvaluate(arg1, srcRowIndex, srcColumnIndex);
|
double d1 = singleOperandEvaluate(arg1, srcRowIndex, srcColumnIndex);
|
||||||
double multi = Math.pow(10d,d1);
|
result = MathX.roundDown(d0, (int)d1);
|
||||||
if(d0 < 0) result = -Math.floor(-d0 * multi) / multi;
|
|
||||||
else result = Math.floor(d0 * multi) / multi;
|
|
||||||
checkValue(result);
|
checkValue(result);
|
||||||
}catch (EvaluationException e) {
|
}catch (EvaluationException e) {
|
||||||
return e.getErrorEval();
|
return e.getErrorEval();
|
||||||
|
|
|
@ -57,6 +57,21 @@ public final class TestTrunc extends BaseTestNumeric {
|
||||||
assertEquals("TRUNC", (new NumberEval(2.612d)).getNumberValue(), ((NumberEval)result).getNumberValue());
|
assertEquals("TRUNC", (new NumberEval(2.612d)).getNumberValue(), ((NumberEval)result).getNumberValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTruncWithProblematicDecimalNumber() {
|
||||||
|
ValueEval[] args = { new NumberEval(0.29), new NumberEval(2) };
|
||||||
|
ValueEval result = NumericFunction.TRUNC.evaluate(args, -1, (short)-1);
|
||||||
|
assertEquals("TRUNC", (new NumberEval(0.29d)).getNumberValue(), ((NumberEval)result).getNumberValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTruncWithProblematicCalculationResult() {
|
||||||
|
|
||||||
|
ValueEval[] args = { new NumberEval(21.624d / 24d + .009d), new NumberEval(2) };
|
||||||
|
ValueEval result = NumericFunction.TRUNC.evaluate(args, -1, (short)-1);
|
||||||
|
assertEquals("TRUNC", (new NumberEval(0.91d)).getNumberValue(), ((NumberEval)result).getNumberValue());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testTruncWithDecimalNumberOneArg() {
|
public void testTruncWithDecimalNumberOneArg() {
|
||||||
ValueEval[] args = { new NumberEval(2.612777) };
|
ValueEval[] args = { new NumberEval(2.612777) };
|
||||||
|
|
Loading…
Reference in New Issue