Parte tonta del código...generar ordinales para los números (th,rd etc...) (Español (Spanish))

Parte tonta del código...generar ordinales para los números (th,rd etc...)

Saturday, 03 July 2004

//

2 minute read

ACTUALIZACIÓN: Mi código de abajo, por supuesto, tiene un error (lo escribí para probar las habilidades perceptivas de la comunidad ;-)) de todos modos, Philip Reick comentó con una versión más creíble:

Hmm .. mi apuesta es que usted lo encontró de nuevo después de olvidarlo porque lo tiró a la basura. Devolvería el resultado incorrecto para entradas como "42", "123", "101", etc. He hecho mucho - guardo código por alguna razón incluso cuando es incorrecto (como, es el código suministrado por el vendedor, o tiene algún truco en él), luego un año más tarde lo encuentro y tengo que probarlo todo de nuevo porque no grabé POR QUÉ lo guardé. Inútil manera de guardar las cosas, pero tengo algunos malos hábitos.

Aquí hay uno que uso a menudo (bueno, sorta - está fuera de la parte superior de la cabeza, no hay compilador aquí)

cadena estática privada GetOrdinal(número de int) { lugar = número % 10; i( lugar) > 3) devolver "th";

// Caso especial para adolescentes adolescente = número % 100; i(doce) < 20 & & adolescente > 10) { devolver "th"; } if( lugar ==1) devuelve "st"; if( lugar ==2) devuelve "nd"; if( lugar ==3) devuelve "rd"; devolver "th";

OK, no es la pieza de código más compleja del planeta, se encontró con ella al reinstalar mi máquina rota.Me parece como algo que el Framework puede haber incorporado, pero no pude localizarlo... De todos modos, dado un entero, este fragmento devolverá una cadena con el ordinal correcto.

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;
            }
        }
    }
Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.