2011-10-01 4 views
3

Quel serait le résultat attendu du code Objective C suivant? Je pensais que la valeur de la chaîne serait "+01", il s'avère être "+1". D'une certaine manière, "0" dans la chaîne de format "+01" est ignoré. Changez le code en:Résultat inattendu de "stringWithFormat:"

int intValue = 1; 
NSString *string = [NSString stringWithFormat:@"%02d", intValue]; 

la valeur de la chaîne est maintenant "01". Il génère le "0" principal. Toutefois, si intValue est négative, comme dans:

int intValue = -1; 
NSString *string = [NSString stringWithFormat:@"%02d", intValue]; 

la valeur de chaîne devient "-1", pas "-01".

Ai-je raté quelque chose? Ou est-ce un problème connu? Quelle serait la solution de contournement recommandée? Merci d'avance.

+3

Je soupçonne que le numéro indique la largeur du champ, y compris le signe, pas le nombre de chiffres. –

+0

@Mark, vous avez raison. Merci. –

+0

@Mark Byers, +1 pour le commentaire! Vous avez raison à ce sujet! – EmptyStack

Répondre

8

@Mark Byers est correct dans son commentaire. La spécification '0' remplit les chiffres significatifs avec '0' par rapport au signe '+/-'. Au lieu de '0' utiliser le point '.' qui remplit les chiffres significatifs avec '0'indépendamment du signe.

[... stringWithFormat:@"%+.2d", 1]; // Result is @"+01" 
[... stringWithFormat:@"%.2d", -1]; // Result is @"-01" 
-1
NSString *string = [NSString stringWithFormat:@"+0%d", intValue]; 
NSString *string = [NSString stringWithFormat:@"-0%d", intValue]; 
+0

La première ligne donnera '+ 0-1' quand' intValue' est '-1'. La deuxième ligne aura pour résultat '-01' quand' intValue' est '1'. – EmptyStack

+0

donc vous pouvez vérifier avec la condition if si la valeur est inférieure à 0 ou supérieure à 0 simple. – leena

+0

Très bien. La question ne concerne pas l'ajout d'un 0 supplémentaire avant le nombre. Son sur le remplissage du nombre avec 0, si le nombre réel moins de 2 chiffres ;-) – EmptyStack