4

可能重复:
NSNumberFormatter 和 'th' 'st' 'nd' 'rd' (序数)数字结尾

你好,

我正在构建一个下载玩家排名并显示它们的应用程序。比如说,你是所有玩家中的第 3 名,我插入了一个条件,将其显示为第 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 个等级) - 我该怎么做才能解决这个问题?

4

2 回答 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";
    }
}
于 2010-07-23T16:47:01.200 回答
1

让它检查每个数字的最后一位,然后相应地添加后缀。

检查最后 2 位数字将修复它。

于 2010-07-23T16:44:12.903 回答