# File lib/facet/lisp-format.rb, line 1240
        def execute(state)
          digits = param(0, state, 2)
          idigits = param(1, state, 1)
          width = param(2, state, 0)
          padchar = param(3, state, ?\s)
          arg = state.next_arg
          if arg.respond_to :to_int
            sign = (arg >= 0 ? (at_mod? ? '+' : '') : '-')
            str = sprintf("%0#{idigits + digits + 1}.#{digits}f", arg.abs)
            if colon_mod?
              str = sign + str.rjust(width, padchar.chr)
            else
              str = (sign + str).rjust(width, padchar.chr)
            end
            state.output str
          elsif arg.respond_to? :to_i
            state.push_back_arg
            parameters = @params[2].nil? ? [] : [@params[2]]
            Factory.build(?D, parameters, [], nil, @pos).execute(state)
          else
            arg_error 'argument is not a number or a number string'
          end
        end