Целочисленные расширения - 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";
    }
}
Другие вопросы по тегам