¿Hay una cadena de formato estándar en ASP.NET para convertir 1/2/3 / ... a primera / segunda / tercera ...?

StackOverflow https://stackoverflow.com/questions/2926445

Pregunta

I tiene un número entero en una base de datos, que está siendo representada en ASP.NET. El número entero representa la posición alcanzada por un competidor en un evento deportivo (primero, segundo, tercero, etc.), y me gustaría mostrarlo con un sufijo estándar como 'st', 'nd', 'er' según el caso , en lugar de sólo un número desnuda.

Una limitación importante es que se trata de una misión que especifica que ningún VB o C # código de ser escritos (de hecho se instruye código detrás de los archivos que se eliminarán por completo). Lo ideal sería utilizar una cadena de formato estándar, si está disponible, de lo contrario tal vez una cadena personalizada (no he trabajado con cadenas de formato mucho, y esto no es lo suficientemente alta prioridad a tiempo significativo dedicar a *, pero estoy muy curiosa acerca de si hay una cadena estándar para esto).

(* La tarea es para esta noche, y he aprendido de la manera difícil que no pueda permitirse el lujo de gastar tiempo en cosas que no reciben las marcas, aunque me molestan de manera significativa.)

¿Fue útil?

Solución

Por desgracia, no hay ninguna cadena de formato estándar de hacer esto. Pero no es tan difícil de escribir:

public static string ToOrdinal(this int i, string format)
{
   string suffix = "th";
   switch (i%100)
   {
       case 11:
       case 12:
       case 13:
          //deliberately empty
          break;
       default:
          switch (i%10)
          {
              case 1:
                  suffix = "st";
                  break;
              case 2:
                  suffix = "nd";
                  break;
              case 3:
                  suffix = "rd";
                  break;
           }
           break;
   }
   return i.ToString(format) + suffix;
}

Otros consejos

Se podría intentar esto

public static string FormatOrdinalNumber(int number)
{
    if (number == 0) return "0";
    switch (number % 100)
    {
        case 11: 
        case 12: 
        case 13: 
        return number + "th";
    }
    switch (number % 10)
    {
        case 1: return number + "st";
        case 2: return number + "nd";
        case 3: return number + "rd";
    }
    return number + "th";
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top