73 votes

Existe-t-il un moyen simple dans .NET d’obtenir les terminaisons "st", "nd", "rd" et "th" pour les nombres?

Je me demande si il y a une méthode ou une chaîne de format, je suis absent .NET pour convertir les suivantes:

   1 to 1st
   2 to 2nd
   3 to 3rd
   4 to 4th
  11 to 11th
 101 to 101st
 111 to 111th

Ce lien a un mauvais exemple du principe de base impliqués dans la rédaction de votre propre fonction, mais je suis plus curieux de savoir si il y a une fonction intégrée de capacité, je suis absent.

Solution

Scott, Hanselman la réponse est accepté parce qu'il répond à la question directement.

Pour une solution, cependant, de voir cette grande réponse.

87voto

nickf Points 185423

C'est une fonction beaucoup plus simple que vous ne le pensez. Bien qu’il existe peut-être déjà une fonction .NET pour cela, la fonction suivante (écrite en PHP) fait le travail. Il ne devrait pas être trop difficile de le reporter.

 function ordinal($num) {
    $ones = $num % 10;
    $tens = floor($num / 10) % 10;
    if ($tens == 1) {
        $suff = "th";
    } else {
        switch ($ones) {
            case 1 : $suff = "st"; break;
            case 2 : $suff = "nd"; break;
            case 3 : $suff = "rd"; break;
            default : $suff = "th";
        }
    }
    return $num . $suff;
}
 

83voto

Shahzad Qureshi Points 106

Simple, propre, rapide

     private static string GetOrdinalSuffix(int num)
    {
        if (num.ToString().EndsWith("11")) return "th";
        if (num.ToString().EndsWith("12")) return "th";
        if (num.ToString().EndsWith("13")) return "th";
        if (num.ToString().EndsWith("1")) return "st";
        if (num.ToString().EndsWith("2")) return "nd";
        if (num.ToString().EndsWith("3")) return "rd";
        return "th";
    }
 

60voto

Scott Hanselman Points 13109

Non, il n'y a pas de fonctionnalité intégrée dans la bibliothèque de classes .NET Base.

55voto

Scott Dorman Points 25000

@ nickf : Voici la fonction PHP en C #:

 public static string Ordinal(int number)
{
	string suffix = String.Empty;

	int ones = number % 10;
	int tens = (int)Math.Floor(number / 10M) % 10;

	if (tens == 1)
	{
		suffix = "th";
	}
	else
	{
		switch (ones)
		{
			case 1:
				suffix = "st";
				break;

			case 2:
				suffix = "nd";
				break;

			case 3:
				suffix = "rd";
				break;

			default:
				suffix = "th";
				break;
		}
	}
	return String.Format("{0}{1}", number, suffix);
}
 

14voto

marshall Points 3924

Cela a déjà été couvert, mais je ne sais pas comment faire le lien. Voici l'extrait de code:

     public static string Ordinal(this int number)
    {
        var ones = number % 10;
        var tens = Math.Floor (number / 10f) % 10;
        if (tens == 1)
        {
            return number + "th";
        }

        switch (ones)
        {
            case 1: return number + "st";
            case 2: return number + "nd";
            case 3: return number + "rd";
            default: return number + "th";
        }
    }
 

FYI: C'est comme une méthode d'extension. Si votre version .NET est inférieure à 3.5, supprimez simplement le mot-clé this

[EDIT]: Merci d'avoir signalé que c'était incorrect, c'est ce que vous obtenez pour copier / coller du code :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X