Comment ajouter un signe de pourcentage à NSString

456

Je veux avoir un signe de pourcentage dans ma chaîne après un chiffre. Quelque chose comme ça: 75%.

Comment puis-je faire cela? J'ai essayé:

[NSString stringWithFormat:@"%d\%", someDigit];

Mais ça n'a pas marché pour moi.

Ilya Suzdalnitski
la source

Réponses:

943

Le code pour le NSStringformat de connexion en pourcentage est %%. Cela est également vrai pour les formats NSLog()et printf().

mouviciel
la source
J'essaie NSLog ([NSString stringWithFormat: @ "% @ %%", self.Ptextfield.text]); et la sortie est jsut le uitextfield.text
Ali
2
NSLogtraite son premier argument comme une chaîne de format, mais vous avez déjà formaté la chaîne à l'aide de stringWithFormat:. Dis juste NSLog(@"%@%%", self.Ptextfield.text).
rob mayoff
Cela ne fonctionne pas pour UILocalNotification. Voir stackoverflow.com/a/27971848/2446178 .
JRam13
139

Le code d'échappement pour un signe de pourcentage est "%%", donc votre code ressemblerait à ceci

[NSString stringWithFormat:@"%d%%", someDigit];

En outre, tous les autres spécificateurs de format peuvent être trouvés dans les articles Conceptual Strings

binarybob
la source
Et la raison pour laquelle \% ne fonctionne pas est que la barre oblique inverse est le caractère d'échappement pour les littéraux de chaîne, donc taper \% dans votre code source crée en fait une chaîne contenant un seul caractère de pourcentage.
gnasher729
17

Si cela aide dans certains cas, il est possible d'utiliser le caractère unicode:

NSLog(@"Test percentage \uFF05");
Resh32
la source
\uFF05fonctionne pour moi quand il fait partie du NSStringin UILocalNotification, non %%. Merci!
Scott
4
C'est un "signe de pourcentage pleine largeur" ​​à utiliser avec des caractères chinois ou japonais, très différent d'un caractère de pourcentage ordinaire.
gnasher729
7

La réponse acceptée ne fonctionne pas pour UILocalNotification. Pour une raison quelconque, %%%%(signes de 4%) ou le caractère unicode ' \uFF05' ne fonctionne que pour cela.

Donc, pour récapituler, lors du formatage de votre chaîne, vous pouvez utiliser %%. Cependant, si votre chaîne fait partie d'une UILocalNotification, utilisez %%%%ou \uFF05.

JRam13
la source
6

semble être %%suivi d'un %@, NSStringcela ira à des codes étranges essayez ceci et cela a fonctionné pour moi

NSString *str = [NSString stringWithFormat:@"%@%@%@", @"%%", 
                 [textfield text], @"%%"]; 
user1483392
la source
4

Utilisez le code suivant.

 NSString *searchText = @"Bhupi"
 NSString *formatedSearchText = [NSString stringWithFormat:@"%%%@%%",searchText];

affichera: % Bhupi%

Bhoopi
la source
0

iOS 9.2.1, Xcode 7.2.1, ARC activé

Vous pouvez toujours ajouter le «%» seul sans aucun autre spécificateur de format dans la chaîne que vous ajoutez, comme ceci ...

int test = 10;

NSString *stringTest = [NSString stringWithFormat:@"%d", test];
stringTest = [stringTest stringByAppendingString:@"%"];
NSLog(@"%@", stringTest);

Pour iOS7.0 +

Pour étendre la réponse à d'autres caractères susceptibles de provoquer un conflit, vous pouvez choisir d'utiliser:

- (NSString *)stringByAddingPercentEncodingWithAllowedCharacters:(NSCharacterSet *)allowedCharacters

Écrit étape par étape, il ressemble à ceci:

int test = 10;

NSString *stringTest = [NSString stringWithFormat:@"%d", test];
stringTest = [[stringTest stringByAppendingString:@"%"] 
             stringByAddingPercentEncodingWithAllowedCharacters:
             [NSCharacterSet alphanumericCharacterSet]];
stringTest = [stringTest stringByRemovingPercentEncoding];

NSLog(@"percent value of test: %@", stringTest);

Ou main courte:

NSLog(@"percent value of test: %@", [[[[NSString stringWithFormat:@"%d", test] 
stringByAppendingString:@"%"] stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet alphanumericCharacterSet]] stringByRemovingPercentEncoding]);

Merci à tous les contributeurs originaux. J'espère que cela t'aides. À votre santé!

serge-k
la source