public Object getExpressionValue(JeksExpression expression)
    {
        Object value;
        try
        {
            value = expression.getValue(interpreter);
            if (value == null)
                value = DEFAULT_VALUE;
            else if (value instanceof Double)
            {
                Double doubleValue = (Double) value;
                if (doubleValue.isNaN() || doubleValue.isInfinite())
                    value = (String) syntax
                            .getCellError(JeksExpressionSyntax.ERROR_INVALID_NUMBER);
                else if (doubleValue.doubleValue() == Math.floor(doubleValue
                        .doubleValue()))
                    value = new Long(doubleValue.longValue());
            }
        } catch (Exception ex)
        {
            value = syntax.getCellError(ex);
        } catch (Error ex)
        {
            if ((value = syntax.getCellError(ex)) == null)
                throw ex;
        }

        return value;
    }