Index: src/java/org/apache/poi/hssf/record/formula/eval/FunctionEval.java =================================================================== --- src/java/org/apache/poi/hssf/record/formula/eval/FunctionEval.java (revision 927787) +++ src/java/org/apache/poi/hssf/record/formula/eval/FunctionEval.java (working copy) @@ -152,7 +152,7 @@ retval[184] = NumericFunction.FACT; retval[190] = LogicalFunction.ISNONTEXT; - + retval[197] = NumericFunction.TRUNC; retval[198] = LogicalFunction.ISLOGICAL; retval[212] = NumericFunction.ROUNDUP; Index: src/java/org/apache/poi/hssf/record/formula/functions/NumericFunction.java =================================================================== --- src/java/org/apache/poi/hssf/record/formula/functions/NumericFunction.java (revision 927787) +++ src/java/org/apache/poi/hssf/record/formula/functions/NumericFunction.java (working copy) @@ -26,6 +26,7 @@ /** * @author Amol S. Deshmukh < amolweb at ya hoo dot com > * @author Josh Micich + * @author Stephen Wolke (smwolke at geistig.com) */ public abstract class NumericFunction implements Function { @@ -321,7 +322,28 @@ return MathX.roundUp(d0, (int)d1); } }; + static final NumberEval TRUNC_ARG2_DEFAULT = new NumberEval(0); + public static final Function TRUNC = new Var1or2ArgFunction() { + public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0) { + return evaluate(srcRowIndex, srcColumnIndex, arg0, TRUNC_ARG2_DEFAULT); + } + + public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0, ValueEval arg1) { + double result; + try { + double d0 = singleOperandEvaluate(arg0, srcRowIndex, srcColumnIndex); + double d1 = singleOperandEvaluate(arg1, srcRowIndex, srcColumnIndex); + double multi = Math.pow(10d,d1); + result = Math.floor(d0 * multi) / multi; + checkValue(result); + }catch (EvaluationException e) { + return e.getErrorEval(); + } + return new NumberEval(result); + } + }; + /* -------------------------------------------------------------------------- */ private static final class Log extends Var1or2ArgFunction {