¿Hay una cadena de formato estándar en ASP.NET para convertir 1/2/3 / ... a primera / segunda / tercera ...?
-
05-10-2019 - |
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.)
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";
}