Como adicionar um sinal de porcentagem ao NSString

456

Quero ter um sinal de porcentagem na minha string após um dígito. Algo assim: 75%.

Como posso fazer isso? Eu tentei:

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

Mas não funcionou para mim.

Ilya Suzdalnitski
fonte

Respostas:

943

O código para o NSStringformato de sinal de porcentagem é %%. Isso também é válido para NSLog()e printf()formatos.

mouviciel
fonte
Estou tentando o NSLog ([NSString stringWithFormat: @ "% @ %%", self.Ptextfield.text]); ea saída é jsut o uitextfield.text
Ali
2
NSLogtrata seu primeiro argumento como uma sequência de formato, mas você já formatou a sequência usando stringWithFormat:. Apenas diga NSLog(@"%@%%", self.Ptextfield.text).
Rob mayoff
Isso não funciona para UILocalNotification. Consulte stackoverflow.com/a/27971848/2446178 .
JRam13
139

O código de escape para um sinal de porcentagem é "%%", portanto, seu código ficaria assim

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

Além disso, todos os outros especificadores de formato podem ser encontrados em Artigos sobre cadeias conceituais

binarybob
fonte
E a razão pela qual \% não funciona é que a barra invertida é o caractere de escape para literais de seqüência de caracteres; portanto, digitar \% no código-fonte na verdade cria uma sequência contendo um único caractere de porcentagem.
gnasher729
17

Se isso ajudar em alguns casos, é possível usar o caractere unicode:

NSLog(@"Test percentage \uFF05");
Resh32
fonte
\uFF05funciona para mim quando faz parte do NSStringin UILocalNotification, não %%. Obrigado!
Scott Scott
4
Esse é um "sinal de porcentagem de largura total" para uso com caracteres chineses ou japoneses, muito diferente de um caractere de porcentagem comum.
precisa saber é o seguinte
7

A resposta aceita não funciona para UILocalNotification. Por alguma razão, %%%%(sinais de 4%) ou o caractere unicode ' \uFF05' só funcionam para isso.

Então, para recapitular, ao formatar sua string, você pode usar %%. No entanto, se sua string fizer parte de uma UILocalNotification, use %%%%ou \uFF05.

JRam13
fonte
6

parece que se %%seguido com um %@, o NSStringvai para alguns códigos estranhos tente isso e isso funcionou para mim

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

código a seguir.

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

produzirá: % Bhupi%

Bhoopi
fonte
0

iOS 9.2.1, Xcode 7.2.1, ARC ativado

Você sempre pode anexar o '%' sozinho, sem outros especificadores de formato na string que está anexando, assim ...

int test = 10;

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

Para iOS7.0 +

Para expandir a resposta para outros caracteres que podem causar conflitos, você pode optar por usar:

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

Escrito passo a passo, fica assim:

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 mão curta:

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

Obrigado a todos os colaboradores originais. Espero que isto ajude. Felicidades!

serge-k
fonte