Целочисленные расширения - 1, 2, 3 и т. Д.
Возможный дубликат:
NSNumberFormatter и окончание 'th' 'st' 'nd' 'rd' (порядковый номер)
Привет,
Я создаю приложение, которое загружает рейтинг игроков и отображает их. Скажем, к примеру, вы третий из всех игроков, я вставил условие, которое будет отображаться как 3-е, а не 3-е, и я сделал то же самое для 2-го и 1-го. При достижении более высоких рангов, таких как 2883-й, он будет отображать 2883-й (по понятным причинам)
У меня вопрос, как я могу заставить его переформатировать номер в XXX1st, XXX2nd, XXX3rd и т. Д.?
Чтобы показать, что я имею в виду, вот как я форматирую свой номер, чтобы добавить "RD", если это 3
if ([[container stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] isEqualToString:@"3"])
{
NSString*badge = [NSString stringWithFormat:@"%@rd",[container stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
NSString*scoreText = [NSString stringWithFormat:@"ROC Server Rank: %@rd",[container stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
profile.badgeValue = badge;
rank.text = scoreText;
}
Я не могу сделать это для каждого числа до 2000 (всего 2000 рангов) - что я могу сделать, чтобы решить эту проблему?
2 ответа
Сделайте так, чтобы он проверял последнюю цифру каждого числа, затем добавьте суффикс соответственно.
Проверка последних 2 цифр исправит это.
Вот небольшой фрагмент на другом языке: http://www.bytechaser.com/en/functions/b6yhfyxh78/convert-number-to-ordinal-like-1st-2nd-in-c-sharp.aspx
/// <summary>
/// Create an ordinal number from any number
/// e.g. 1 becomes 1st and 22 becomes 22nd
/// </summary>
/// <param name="number">Number to convert</param>
/// <returns>Ordinal value as string</returns>
public static string FormatOrdinalNumber(int number)
{
//0 remains just 0
if (number == 0) return "0";
//test for number between 3 and 21 as they follow a
//slightly different rule and all end with th
if (number > 3 && number < 21)
{
return number + "th";
}
//return the last digit of the number e.g. 102 is 2
var lastdigit = number % 10;
//append the correct ordinal val
switch (lastdigit)
{
case 1: return number + "st";
case 2: return number + "nd";
case 3: return number + "rd";
default: return number + "th";
}
}