Это может быть немного поздно, и на суть вашего вопроса ответят хорошо. Но я хочу напомнить, чтобы избежать форсировки поведения разделителя и десятичной точки. Весьма рекомендуется соблюдать настройку локали устройства, чтобы отображать числа с правильным поведением локали.
1. NSNumberFormatter:
NSNumberFormatter *valueFormatter = [[NSNumberFormatter alloc]init];
valueFormatter.locale = [NSLocale currentLocale]; // <-- allow the device locale setting
// valueFormatter.GroupingSeparator:@","]; // don't force locale behavior
valueFormatter.numberStyle = NSNumberFormatterDecimalStyle;
valueFormatter.usesGroupingSeparator = YES;
valueFormatter.groupingSize = 3;
valueFormatter.maximumFractionDigits = 0; // this is important to have your primary issue solved
2. показать номера с правильным языком:
В вашем случае, возможно, нет необходимости использовать NSNumberFormatter
, так как устройство все равно покажет разделитель. Чтобы построить NSString
из примитивных типов данных (например, int
) с правильным поведением локали, просто используйте localizedStringWithFormat
и отформатируйте число следующим образом:
NSString *testString = [NSString localizedStringWithFormat:@"%lu", intToBeDisplayed];
с NSNumber
объектами:
NSNumber *longNumber = [NSNumber numberWithUnsignedLong:intToBeDisplayed];
NSString *testString = [NSString localizedStringWithFormat:@"%lu", longNumber.unsignedLongValue];
3. показывать числа с NSNumberFormatter
(правый язык):
NSNumber *longNumber = [NSNumber numberWithUnsignedLong:intToBeDisplayed];
NSString *testString = [NSString localizedStringWithFormat:@"%@", [valueFormatter stringForObjectValue:longNumber]];
Использование объекта NSNumber longNumber
в метках или текстовых полях, например ::1010*
testLabel.text = [NSString localizedStringWithFormat:@"%@", [valueFormatter stringForObjectValue:longNumber]];
выдаст следующий вывод на устройствах с настройкой английской локали:
1.234.567.890
на устройствах с настройками (например, немецкой локали) будет автоматически отображаться число следующим образом:
1.234.567.890
Надеюсь, я мог бы добавить немного больше к (сложной) проблеме форматирования чисел.