code: public Object eval(Scope scope) {
  		Object value = expr.eval(scope);
  		if (value == null) {
  			if (scope.getCtrl().isNullSafe()) {
  				return null;
  			}
  			throw new TemplateException("The parameter of \"" + op.value() + "\" operator can not be blank", location);
  		}
  		if (! (value instanceof Number) ) {
  			throw new TemplateException(op.value() + " operator only support int long float double BigDecimal type", location);
  		}
  		
  		switch (op) {
  		case ADD:
  			return value;
  		case SUB:
  			Number n = (Number)value;
  			if (n instanceof Integer) {
                  return Integer.valueOf(-n.intValue());
              }
  			if (n instanceof Long) {
                  return Long.valueOf(-n.longValue());
              }
  			if (n instanceof Float) {
                  return Float.valueOf(-n.floatValue());
              }
  			if (n instanceof Double) {
                  return Double.valueOf(-n.doubleValue());
              }
  			if (n instanceof BigDecimal) {
              	return ((BigDecimal)n).negate();
  			}
              throw new TemplateException("Unsupported data type: " + n.getClass().getName(), location);
  		default :
  			throw new TemplateException("Unsupported operator: " + op.value(), location);
  		}
  	}
docs: unary : ('!' | '+' | '-'| '++' | '--') expr