У меня есть следующая переменная:
NSNumber *consumption = [dict objectForKey:@"con"];
Что возвращает 42. Как я могу поместить это число на 10 цифр слева, с нулями. Результат должен выглядеть так:
0000000042
или если он равен 420,
0000000420
У меня есть следующая переменная:
NSNumber *consumption = [dict objectForKey:@"con"];
Что возвращает 42. Как я могу поместить это число на 10 цифр слева, с нулями. Результат должен выглядеть так:
0000000042
или если он равен 420,
0000000420
NSString *paddedStr = [NSString stringWithFormat:@"%010d", 42];
EDIT: форматирование стиля C. % nd означает, что ширина не меньше n. Поэтому, если целое число имеет длину 2 цифры, тогда вы будете иметь длину 3 строки (когда используется% 3d). По умолчанию пустые пробелы заполняются пробелом. % 0nd (0 между% и n) означает, что 0 используется для заполнения вместо пространства. Здесь n
- общая длина. Если целое число меньше n
цифр, то используется остальное дополнение.
Способ 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
путь быстрее.
Вы не можете в самом NSNumber
. Если вы создаете строку из числа или используя NSLog()
, просто используйте соответствующий формат, например.
NSLog(@"%010d", [consumption intValue]);
Вы можете сделать практически любое форматирование чисел, которое вы когда-либо хотели бы с помощью NSNumberFormatter. В этом случае я думаю, вы бы хотели использовать setFormatWidth: и setPaddingCharacter:.
например. Заполните остальные нулями, 5 цифр:
NSInteger someValue = 10;
[NSString stringWithFormat:@"%05ld", someValue];
Эквивалент .02f
для числа float, когда вам нужно всего 2 цифры после точки.
Итак, у вас есть 0 = заполнение нулями, 5 = количество цифр и тип.
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"