code_junkie

Is there an easy way to create ordinals in C#?

Nov 10th, 2011
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.45 KB | None | 0 0
  1. public string AddOrdinal(int num)
  2. {
  3. switch(num % 100)
  4. {
  5. case 11:
  6. case 12:
  7. case 13:
  8. return num.ToString() + "th";
  9. }
  10.  
  11. switch(num % 10)
  12. {
  13. case 1:
  14. return num.ToString() + "st";
  15. case 2:
  16. return num.ToString() + "nd";
  17. case 3:
  18. return num.ToString() + "rd";
  19. default:
  20. return num.ToString() + "th";
  21. }
  22.  
  23. }
  24.  
  25. /// <summary>
  26. /// Get the ordinal value of positive integers.
  27. /// </summary>
  28. /// <remarks>
  29. /// Only works for english-based cultures.
  30. /// Code from: http://stackoverflow.com/questions/20156/is-there-a-quick-way-to-create-ordinals-in-c/31066#31066
  31. /// With help: http://www.wisegeek.com/what-is-an-ordinal-number.htm
  32. /// </remarks>
  33. /// <param name="number">The number.</param>
  34. /// <returns>Ordinal value of positive integers, or <see cref="int.ToString"/> if less than 1.</returns>
  35. public static string Ordinal(this int number)
  36. {
  37. const string TH = "th";
  38. string s = number.ToString();
  39.  
  40. // Negative and zero have no ordinal representation
  41. if (number < 1)
  42. {
  43. return s;
  44. }
  45.  
  46. number %= 100;
  47. if ((number >= 11) && (number <= 13))
  48. {
  49. return s + TH;
  50. }
  51.  
  52. switch (number % 10)
  53. {
  54. case 1: return s + "st";
  55. case 2: return s + "nd";
  56. case 3: return s + "rd";
  57. default: return s + TH;
  58. }
  59. }
  60.  
  61. [Test]
  62. public void Ordinal_ReturnsExpectedResults()
  63. {
  64. Assert.AreEqual("-1", (1-2).Ordinal());
  65. Assert.AreEqual("0", 0.Ordinal());
  66. Assert.AreEqual("1st", 1.Ordinal());
  67. Assert.AreEqual("2nd", 2.Ordinal());
  68. Assert.AreEqual("3rd", 3.Ordinal());
  69. Assert.AreEqual("4th", 4.Ordinal());
  70. Assert.AreEqual("5th", 5.Ordinal());
  71. Assert.AreEqual("6th", 6.Ordinal());
  72. Assert.AreEqual("7th", 7.Ordinal());
  73. Assert.AreEqual("8th", 8.Ordinal());
  74. Assert.AreEqual("9th", 9.Ordinal());
  75. Assert.AreEqual("10th", 10.Ordinal());
  76. Assert.AreEqual("11th", 11.Ordinal());
  77. Assert.AreEqual("12th", 12.Ordinal());
  78. Assert.AreEqual("13th", 13.Ordinal());
  79. Assert.AreEqual("14th", 14.Ordinal());
  80. Assert.AreEqual("20th", 20.Ordinal());
  81. Assert.AreEqual("21st", 21.Ordinal());
  82. Assert.AreEqual("22nd", 22.Ordinal());
  83. Assert.AreEqual("23rd", 23.Ordinal());
  84. Assert.AreEqual("24th", 24.Ordinal());
  85. Assert.AreEqual("100th", 100.Ordinal());
  86. Assert.AreEqual("101st", 101.Ordinal());
  87. Assert.AreEqual("102nd", 102.Ordinal());
  88. Assert.AreEqual("103rd", 103.Ordinal());
  89. Assert.AreEqual("104th", 104.Ordinal());
  90. Assert.AreEqual("110th", 110.Ordinal());
  91. Assert.AreEqual("111th", 111.Ordinal());
  92. Assert.AreEqual("112th", 112.Ordinal());
  93. Assert.AreEqual("113th", 113.Ordinal());
  94. Assert.AreEqual("114th", 114.Ordinal());
  95. Assert.AreEqual("120th", 120.Ordinal());
  96. Assert.AreEqual("121st", 121.Ordinal());
  97. Assert.AreEqual("122nd", 122.Ordinal());
  98. Assert.AreEqual("123rd", 123.Ordinal());
  99. Assert.AreEqual("124th", 124.Ordinal());
  100. }
  101.  
  102. public static string Ordinal(this int number)
  103. {
  104. var work = number.ToString();
  105. if (number == 11 || number == 12 || number == 13)
  106. return work + "th";
  107. switch (number % 10)
  108. {
  109. case 1: work += "st"; break;
  110. case 2: work += "nd"; break;
  111. case 3: work += "rd"; break;
  112. default: work += "th"; break;
  113. }
  114. return work;
  115. }
  116.  
  117. Console.WriteLine(432.Ordinal());
  118.  
  119. public class NumberUtil {
  120. final static String[] ORDINAL_SUFFIXES = {
  121. "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th"
  122. };
  123.  
  124. public static String ordinalSuffix(int value) {
  125. int n = Math.abs(value);
  126. int lastTwoDigits = n % 100;
  127. int lastDigit = n % 10;
  128. int index = (lastTwoDigits >= 11 && lastTwoDigits <= 13) ? 0 : lastDigit;
  129. return ORDINAL_SUFFIXES[index];
  130. }
  131.  
  132. public static String toOrdinal(int n) {
  133. return new StringBuffer().append(n).append(ordinalSuffix(n)).toString();
  134. }
  135. }
  136.  
  137. public static string
  138. Ordinal (this int number)
  139. {
  140. const string TH = "th";
  141. var s = number.ToString ();
  142.  
  143. number %= 100;
  144.  
  145. if ((number >= 11) && (number <= 13))
  146. {
  147. return s + TH;
  148. }
  149.  
  150. switch (number % 10)
  151. {
  152. case 1:
  153. return s + "st";
  154. case 2:
  155. return s + "nd";
  156. case 3:
  157. return s + "rd";
  158. default:
  159. return s + TH;
  160. }
  161. }
Add Comment
Please, Sign In to add comment