Подтвердить что ты не робот

Как я могу поместить целое число слева нулями?

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

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

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

0000000042

или если он равен 420,

0000000420

4b9b3361

Ответ 1

NSString *paddedStr = [NSString stringWithFormat:@"%010d", 42];

EDIT: форматирование стиля C. % nd означает, что ширина не меньше n. Поэтому, если целое число имеет длину 2 цифры, тогда вы будете иметь длину 3 строки (когда используется% 3d). По умолчанию пустые пробелы заполняются пробелом. % 0nd (0 между% и n) означает, что 0 используется для заполнения вместо пространства. Здесь n - общая длина. Если целое число меньше n цифр, то используется остальное дополнение.

Ответ 2

Способ 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 путь быстрее.

Ответ 3

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

NSLog(@"%010d", [consumption intValue]);

Ответ 4

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

Ответ 5

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

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

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

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

Ответ 6

Решение для 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))!

OUTPUT

"+0000001078,1"