【问题标题】:Integer Extensions - 1st, 2nd, 3rd etc [duplicate]整数扩展 - 第 1、第 2、第 3 等 [重复]
【发布时间】:2010-07-23 16:35:34
【问题描述】:

可能重复:
NSNumberFormatter and ‘th’ ‘st’ ‘nd’ ‘rd’ (ordinal) number endings

你好,

我正在构建一个下载玩家排名并显示它们的应用程序。比如说,你是所有玩家中的第 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 个等级) - 我可以做些什么来解决这个问题?

【问题讨论】:

  • 将序数显示为 2883th 的明显原因是什么?当我读到它时,我说的是“两千八百八十三”,而不是“两千八百八十三”。
  • ...为什么最近突然每个人都想对一个数字进行排序?

标签: iphone cocoa integer ordinals


【解决方案1】:

这是另一种语言的简短 sn-p: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";
    }
}

【讨论】:

  • 这对于 112 等会失败。这将返回第 112 位,但应该是第 112 位。
  • 以上代码在 bytechaser.com 网站上进行了更新,使其更加简洁,应该适用于所有数字
【解决方案2】:

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

检查最后 2 位数字将解决它。

【讨论】:

  • 不仅仅是最后一个数字给出了排序。 3 与 13 不同,但与 133 相同
猜你喜欢
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 2021-05-31
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多