# Stupido pezzo di codice ... ordinali generati per i numeri (th,rd ecc...)

<datetime class="hidden">2004-07-03T00:00</datetime>

<!-- category -- mostlylucidcouk, Imported -->
AGGIORNAMENTO: Il mio codice sotto naturalmente ha un errore (l'ho scritto per testare le capacità percettive della comunità;-)) comunque, Philip Reick ha commentato con una versione più credibile:

Hmm... la mia scommessa è che sei venuto attraverso di nuovo dopo averlo dimenticato perché l'hai buttato via. Sarebbe restituire il risultato sbagliato per gli input come "42," "123," "101," ecc Ho fatto molto - Salvo il codice per qualche motivo anche quando è errato (come, il suo codice fornito dal venditore, o ha qualche trucco in esso), poi un anno dopo lo trovo e devo testarlo di nuovo perché non ho registrato PERCHÉ ho salvato. Inutile modo per salvare le cose, ma ho alcune cattive abitudini.

Ecco uno che uso spesso (beh, tipo - è fuori dalla cima della testa, nessun compilatore qui)

stringa statica privata GetOrdinal(numeroint)
{
int place = numero % 10;
if( posto &gt; 3) restituire "th";

//caso speciale per adolescenti
int teen = numero % 100;
if(teen &lt; 20 && teen &gt; 10)
{
return "th";
}
if( place == 1) return "st";
if( place == 2) return "nd";
if( place == 3) return "rd";
return "th";

OK, non il più complesso pezzo di codice del pianeta, è venuto attraverso quando reinstallare la mia macchina rotta.Mi colpisce come qualcosa che il Framework potrebbe aver costruito, ma non sono riuscito a localizzarlo ... Comunque, dato un intero, questo frammento restituirà una stringa con l'ordinale corretto.

```
THIS CODE IS INCORRECT! Retained for amusement purposes only :0(
```

```
public class OrdinalNumber
    {
        public static string  GetOrdinal(int Number) 
        {
        
            try
            {
                string numStr = Number.ToString();
                // Accepts an integer, returns the ordinal suffix
                //  special case three digit numbers ending
                // with 11, 12 or 13 - ie, 111th, 112th, 113th, 211th, et al
                if (numStr.Length > 2 ) 
                {
                    int intEndNum = Convert.ToInt32(numStr.Substring(numStr.Length - 2, 2));
                    if ( intEndNum >= 11 && intEndNum <= 13 ) return "th";
                        
                }
                if ( Number >= 21 && Number <=23) 
                {
                    //  21st, 22nd, 23rd, et al
                    switch (Convert.ToInt32(numStr.Substring(numStr.Length - 1, 1))) 
                    {
                        case 1: return "st";
                        case 2: return "nd";
                        case 3:    return "rd";
                        default: return "th";
                    }
                } 
                else if(Number >=1 && Number <=3)
                {
                    //  1st to 20th
                    switch (Number) 
                    {
                        case 1: return "st";
                        case 2:    return "nd";
                        case 3:    return "rd";
                        default: return "th";
                    }
                }
                else
                {
                    return "th";
                }
            }
            catch(Exception)
            {
                return string.Empty;
            }
        }
    }
```