class NumberTokenExpression extends Token {
    
    private static final Logger logger = LoggerFactory.getLogger(NumberTokenExpression.class);

    private static final long serialVersionUID = -3729844055243242571L;


    public static final char DECIMAL_POINT = '.';
    


    static Number computeValue(final String value) {
        final BigDecimal bigDecimalValue = new BigDecimal(value);
        if (bigDecimalValue.scale() > 0) {
            return bigDecimalValue;
        }
        return bigDecimalValue.toBigInteger();
    }

    
    public NumberTokenExpression(final String value) {
        super(computeValue(value));
    }
    

    
    @Override
    public String getStringRepresentation() {
        final Object value = getValue();
        if (value instanceof BigDecimal) {
            return ((BigDecimal)getValue()).toPlainString();
        }
        return value.toString();
    }


    
    static NumberTokenExpression parseNumberTokenExpression(final String input) {<FILL_FUNCTION_BODY>}
    

    
    static Object executeNumberTokenExpression(
            final IExpressionContext context,
            final NumberTokenExpression expression,
            final StandardExpressionExecutionContext expContext) {

        if (logger.isTraceEnabled()) {
            logger.trace("[THYMELEAF][{}] Evaluating number token: \"{}\"", TemplateEngine.threadIndex(), expression.getStringRepresentation());
        }
        
        return expression.getValue();
        
    }
    
}

        if (StringUtils.isEmptyOrWhitespace(input)) {
            return null;
        }
        boolean decimalFound = false;
        final int inputLen = input.length();
        for (int i = 0; i < inputLen; i++) {
            final char c = input.charAt(i);
            if (Character.isDigit(c)) {
                continue;
            } else if (c == DECIMAL_POINT) {
                if (decimalFound) {
                    return null;
                }
                decimalFound = true;
                continue;
            } else {
                return null;
            }
        }
        try {
            return new NumberTokenExpression(input);
        } catch (final NumberFormatException e) {
            // It seems after all it wasn't valid as a number
            return null;
        }
    
<methods>public java.lang.String getStringRepresentation() ,public java.lang.Object getValue() ,public static boolean isTokenChar(java.lang.String, int) ,public java.lang.String toString() <variables>private static final long serialVersionUID,private final non-sealed java.lang.Object value