code: def do_round(value, precision=0, method='common'):
      
      if not method in ('common', 'ceil', 'floor'):
          raise FilterArgumentError('method must be common, ceil or floor')
      if method == 'common':
          return round(value, precision)
      func = getattr(math, method)
      return func(value * (10 ** precision)) / (10 ** precision)
docs: Round the number to a given precision. The first
      parameter specifies the precision (default is ``0``), the
      second the rounding method:
  
      - ``'common'`` rounds either up or down
      - ``'ceil'`` always rounds up
      - ``'floor'`` always rounds down
  
      If you don't specify a method ``'common'`` is used.
  
      .. sourcecode:: jinja
  
          {{ 42.55|round }}
              -> 43.0
          {{ 42.55|round(1, 'floor') }}
              -> 42.5
  
      Note that even if rounded to 0 precision, a float is returned.  If
      you need a real integer, pipe it through `int`:
  
      .. sourcecode:: jinja
  
          {{ 42.55|round|int }}
              -> 43