NSNumberFormatter and 'th' 'st' 'nd' 'rd' (ordinal) number endings
This does the trick in one method (for English). Thanks nickf https://stackoverflow.com/a/69284/1208690 for original code in PHP, I just adapted it to objective C
:-
-(NSString *) addSuffixToNumber:(int) number
{
NSString *suffix;
int ones = number % 10;
int tens = (number/10) % 10;
if (tens ==1) {
suffix = @"th";
} else if (ones ==1){
suffix = @"st";
} else if (ones ==2){
suffix = @"nd";
} else if (ones ==3){
suffix = @"rd";
} else {
suffix = @"th";
}
NSString * completeAsString = [NSString stringWithFormat:@"%d%@", number, suffix];
return completeAsString;
}
As of iOS 9
Swift 4
private var ordinalFormatter: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .ordinal
return formatter
}()
extension Int {
var ordinal: String? {
return ordinalFormatter.string(from: NSNumber(value: self))
}
}
It's probably best to have the formatter outside the extension...
The correct way to do this from iOS 9 onwards, is:
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle = NSNumberFormatterOrdinalStyle;
NSLog(@"%@", [numberFormatter stringFromNumber:@(1)]); // 1st
NSLog(@"%@", [numberFormatter stringFromNumber:@(2)]); // 2nd
NSLog(@"%@", [numberFormatter stringFromNumber:@(3)]); // 3rd, etc.
Alternatively:
NSLog(@"%@", [NSString localizedStringFromNumber:@(1)
numberStyle:NSNumberFormatterOrdinalStyle]); // 1st