Java 7, Score = Upvotes - 3.97
==============================

Yay!!! Java!!! The world's favourite golfing language in the world. What, you can actually golf in java??? Well, it's kind of like using a bulldozer to putt.

`a` is expected to contain the first character. `b` is expected to contain the last character. `c` is expected to have the input string.

Here is the function golfed:

<!-- language-all: lang-java -->

    int d=0;try{d=Integer.parseInt(c);}catch(Exception e){}int l=b-a+1;char[]f=new char[l];int[]g=new int[l];int h=1;int i=1;g[0]=1;f[0]=a;int j;for(j=1;j<b-a+1;){g[j]=(h+=i);f[j]=(char)(f[j++-1]+1);i*=h==10*i?10:1;}if(d==0){h=0;for(char k:c.toCharArray()){for(j=0;j<l;j++){if(f[j]==k){h+=g[j];}}}System.out.println(h);}else{c="";for(j=l;j>0;){if(g[--j]<=d){c+=f[j];d-=g[j++];}}System.out.println(c);}

Here it is indented with structure code:

    public class G{
    
        public static void main(String[] args){
            new G(args);
        }
    
        public G(String[] args){
            a = args[0].charAt(0);
            b = args[1].charAt(0);
            for (int i = 2; i < args.length; i++){
                c += args[i];
            }
            function();
        }
    
        char a;
    
        char b;
    
        String c = "";
    
        void function(){
            int d=0;
            try{
                d=Integer.parseInt(c);
            }catch(Exception e){}
            int l=b-a+1;
            char[]f=new char[l];
            int[]g=new int[l];
            int h=1;
            int i=1;
            g[0]=1;
            f[0]=a;
            int j;
            for(j=1;j<b-a+1;){
                g[j]=(h+=i);
                f[j]=(char)(f[j++-1]+1);
                i*=h==10*i?10:1;
            }
            if(d==0){
                h=0;
                for(char k:c.toCharArray()){
                    for(j=0;j<l;j++){
                        if(f[j]==k){
                            h+=g[j];
                        }
                    }
                }
                System.out.println(h);
            }else{
                c="";
                for(j=l;j>0;){
                    if(g[--j]<=d){
                        c+=f[j];
                        d-=g[j++];
                    }
                }
                System.out.println(c);
            }
        }
    }

Here it is completely expanded:

    public class Generator{
    
        public static void main(String[] args){
            beginning = args[0].charAt(0);
            end = args[1].charAt(0);
            for (int i = 2; i < args.length; i++){
                phrase += args[i];
            }
            function();
        }
    
        static char beginning;
    
        static char end;
    
        static String phrase = "";
    
        static void function(){
            int convertTo = 0;
            try{
                 convertTo = Integer.parseInt(phrase);
            } catch (Exception e){}
            char[] alphabet = new char[end - beginning + 1];
            int[] values = new int[alphabet.length];
            int value = 1;
            int base = 1;
            values[0] = 1;
            alphabet[0] = beginning;
            int i;
            for (i = 1; i < values.length;){
                values[i] = (value += base);
                alphabet[i] = (char)(alphabet[i++-1]+1);
                base*=value==10*base?10:1;
            }
            if(convertTo==0){
                value = 0;
                for (char character : phrase.toCharArray()){
                    for (i = 0; i < alphabet.length;i++){
                        if (alphabet[i] == character){
                            value += values[i];
                        }
                    }
                }
                System.out.println(value);
            
            
            } else {
                phrase = "";
                for (i = values.length;i > 0;){
                    if (values[--i] <= convertTo){
                        phrase += alphabet[i];
                        convertTo -= values[i++];
                    }
                }
                System.out.println(phrase);
            
            }
        }
    }