Stupido pezzo di codice ... ordinali generati per i numeri (th,rd ecc...)
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 > 3) restituire "th";
//caso speciale per adolescenti int teen = numero % 100; if(teen < 20 && teen > 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;
}
}
}