Search code examples
c#.netordinals

Is there an easy way to create ordinals in C#?


Is there an easy way in C# to create Ordinals for a number? For example:

  • 1 returns 1st
  • 2 returns 2nd
  • 3 returns 3rd
  • ...etc

Can this be done through String.Format() or are there any functions available to do this?


Solution

  • This page gives you a complete listing of all custom numerical formatting rules:

    Custom numeric format strings

    As you can see, there is nothing in there about ordinals, so it can't be done using String.Format. However its not really that hard to write a function to do it.

    public static string AddOrdinal(int num)
    {
        if( num <= 0 ) return num.ToString();
    
        switch(num % 100)
        {
            case 11:
            case 12:
            case 13:
                return num + "th";
        }
        
        switch(num % 10)
        {
            case 1:
                return num + "st";
            case 2:
                return num + "nd";
            case 3:
                return num + "rd";
            default:
                return num + "th";
        }
    }
    

    Update: Technically Ordinals don't exist for <= 0, so I've updated the code above. Also removed the redundant ToString() methods.

    Also note, this is not internationalized. I've no idea what ordinals look like in other languages.