Как я могу дополнить целое число слева нулями? - PullRequest
37 голосов
/ 17 июня 2011

У меня есть следующая переменная:

NSNumber *consumption = [dict objectForKey:@"con"];

, которая возвращает 42. Как я могу дополнить это число до 10 цифр слева, начиная с нуля.Вывод должен выглядеть следующим образом:

0000000042

или, если это было 420,

0000000420

Ответы [ 7 ]

97 голосов
/ 17 июня 2011
NSString *paddedStr = [NSString stringWithFormat:@"%010d", 42];

РЕДАКТИРОВАТЬ: Это форматирование в стиле C.% nd означает, что ширина не менее n.Таким образом, если целое число имеет длину 2 цифры, то у вас будет строка длиной 3 (при использовании% 3d).По умолчанию оставленные пустые места заполнены пробелом.% 0nd (0 между% и n) означает, что 0 используется для заполнения вместо пробела.Здесь n - общая длина.Если целое число меньше n цифр, используется левый отступ.

15 голосов
/ 17 июня 2011

Способ Objective-C,

NSNumberFormatter * numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[numberFormatter setPaddingPosition:NSNumberFormatterPadBeforePrefix];
[numberFormatter setPaddingCharacter:@"0"];
[numberFormatter setMinimumIntegerDigits:10];

NSNumber * number = [NSNumber numberWithInt:42];

NSString * theString = [numberFormatter stringFromNumber:number];

NSLog(@"%@", theString);

Путь C быстрее, хотя.

8 голосов
/ 17 июня 2011

Вы не можете в самом NSNumber. Если вы создаете строку из числа или используете NSLog(), просто используйте соответствующий формат, например,

NSLog(@"%010d", [consumption intValue]);
3 голосов
/ 17 июня 2011

Вы можете делать практически любое форматирование чисел с NSNumberFormatter .В этом случае я думаю, что вы хотели бы использовать setFormatWidth: и setPaddingCharacter: функции.

1 голос
/ 30 мая 2018

с переменной num_digits

NSString* format =[NSString stringWithFormat:@"%%0%zdzd", num_digits];
NSString *theString = [NSString stringWithFormat:format, 42];
0 голосов
/ 28 января 2017

Решение для Swift 3

let x = 1078.1243
let numFormatter = NumberFormatter()
numFormatter.minimumFractionDigits = 1 // for float
numFormatter.maximumFractionDigits = 1 // for float
numFormatter.minimumIntegerDigits = 10 // how many digits do want before decimal
numFormatter.paddingPosition = .beforePrefix
numFormatter.paddingCharacter = "0"

let s = numFormatter.string(from: NSNumber(floatLiteral: x))!

ВЫХОД

"0000001078.1"

0 голосов
/ 22 февраля 2016

например. Заполните остальные нули, 5 цифр:

NSInteger someValue = 10;
[NSString stringWithFormat:@"%05ld", someValue];

Эквивалент .02f для числа с плавающей запятой, когда вам нужно только 2 цифры после точки.

Итак, у вас есть 0 = заполнить нулями, 5 = количество цифр и тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...