web-dev-qa-db-fra.com

Comment puis-je remplir un entier à gauche avec des zéros?

J'ai la variable suivante:

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

Qui renvoie 42. Comment puis-je ajouter 10 chiffres à gauche à ce chiffre, avec zéros. La sortie devrait ressembler à,

0000000042

ou si c'était 420,

0000000420

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

EDIT: C'est la mise en forme de style C. % nd signifie que la largeur est au moins n. Ainsi, si le nombre entier est long de 2 chiffres, vous aurez une longueur de 3 chaînes (lorsque% 3d est utilisé). Par défaut, les espaces vides laissés sont remplis par un espace. % 0nd (0 entre% et n) signifie que 0 est utilisé pour le remplissage à la place de l'espace. Ici n est la longueur totale. Si le nombre entier est inférieur à n chiffres, le remplissage à gauche est utilisé. 

97
taskinoor

La manière 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);

La méthode C est plus rapide cependant.

15
Deepak Danduprolu

Vous ne pouvez pas dans la NSNumber elle-même. Si vous créez une chaîne à partir du nombre ou utilisez NSLog(), utilisez simplement le format approprié, par exemple.

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

Avec NSNumberFormatter , vous pouvez effectuer à peu près n'importe quel formatage de nombre. Dans ce cas, je pense que vous voudriez utiliser le setFormatWidth: et setPaddingCharacter: functions.

3
David Brown

avec variablenum_digits

NSString* format =[NSString stringWithFormat:@"%%0%zdzd", num_digits];
NSString *theString = [NSString stringWithFormat:format, 42];
1
dklt

Par exemple. Remplissez le reste avec des zéros, 5 chiffres:

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

Équivalent de .02f pour le numéro flottant lorsque vous n'avez besoin que de 2 chiffres après le point. 

Vous avez donc 0 = remplir avec des zéros, 5 = le nombre de chiffres et le type.

0
Jakub Truhlář

Solution pour 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))!

SORTIE

"0000001078.1"

0
MANISH PATHAK