Я не могу найти простой способ сделать это. То, что мне нужно, это:
[NSString stringWithFormat:@"%d doodads", n];
Где n - int. Так что для 1234 я бы хотел эту строку (под моей локалью):
@"1,234 doodads"
Спасибо.
Я не могу найти простой способ сделать это. То, что мне нужно, это:
[NSString stringWithFormat:@"%d doodads", n];
Где n - int. Так что для 1234 я бы хотел эту строку (под моей локалью):
@"1,234 doodads"
Спасибо.
Недавно я обнаружил этот однострочный слой:
[@1234567 descriptionWithLocale:[NSLocale currentLocale]]; // 1,234,567
Или в Swift 2:
1234567.descriptionWithLocale(NSLocale.currentLocale()) // 1,234,567
Swift 3/4:
(1234567 as NSNumber).description(withLocale: Locale.current)
Отформатирован на вопрос:
[@(n) descriptionWithLocale:[NSLocale currentLocale]];
Отформатировано без Objective-C литералов:
[[NSNumber numberWithInt:n] descriptionWithLocale:[NSLocale currentLocale]];
Это решение, которое я искал, когда задавал вопрос. Доступно с iOS 2.0 и OS X 10.0, задокументировано, чтобы вернуть строчную версию номера, отформатированного в соответствии с предоставленной локалью. stringValue
даже документирован, чтобы использовать этот метод, но передавая nil
.
Увидев, что это мой вопрос, и это лучше всего подходит для моего ответа, у меня возникает соблазн изменить тик, но это кажется жестоким. Обновление Я изменил галочку, этот ответ является ответом.
Для 10.6 это работает:
NSNumberFormatter* numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior: NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
NSString *numberString = [numberFormatter stringFromNumber: [NSNumber numberWithInteger: i]];
И он правильно обрабатывает локализацию.
Ниже приведен не язык, но лучше всего (по-моему) установить разделитель тысяч на число форматера.
NSNumberFormatter *numberFormat = [[[NSNumberFormatter alloc] init] autorelease];
numberFormat.usesGroupingSeparator = YES;
numberFormat.groupingSeparator = @",";
numberFormat.groupingSize = 3;
Тодд Рэнсом ответил на это отлично.
Я просто хотел бы добавить (в отдельном комментарии, чтобы я мог показать какой-то красиво отформатированный код), что, если вы планируете делать это регулярно, стоит создать вспомогательный класс NSString.
Итак, создайте себе NSStringHelper.h, содержащий это:
#import <Foundation/Foundation.h>
@interface NSString (NSStringHelper)
+(NSString*)formatWithThousandSeparator:(NSInteger)number;
@end
.. и файл NSStringHelper.m, содержащий это:
#import "NSStringHelper.h"
@implementation NSString (NSStringHelper)
+(NSString*)formatWithThousandSeparator:(NSInteger)number
{
// Format a number with thousand seperators, eg: "12,345"
NSNumberFormatter* numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior: NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
NSString *result = [numberFormatter stringFromNumber:[NSNumber numberWithInteger:number]];
return result;
}
@end
Это дает вам идеальный способ повторного использования этого кода в будущих проектах.
#import "NSStringHelper.h"
NSInteger numOfUsers = 12345;
NSString* strNumberOfUsers = [NSString formatWithThousandSeparator:numOfUsers];
Прохладный, эй?
Опять же, извинения за повторный ответ Тодда (что было именно то, что я искал!), но это отличный способ решить проблему и готово к использованию в будущих проектах XCode.
Используйте NSNumberFormatter
.