Cómo agregar signo de porcentaje a NSString

456

Quiero tener un signo de porcentaje en mi cadena después de un dígito. Algo como esto: 75%.

¿Cómo puedo hacer esto? Lo intenté:

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

Pero no funcionó para mí.

Ilya Suzdalnitski
fuente

Respuestas:

943

El código para el NSStringformato de inicio de sesión por ciento es %%. Esto también es cierto para NSLog()y los printf()formatos.

Mouviciel
fuente
Estoy intentando NSLog ([NSString stringWithFormat: @ "% @ %%", self.Ptextfield.text]); y la salida es jsut the uitextfield.text
Ali
2
NSLogtrata su primer argumento como una cadena de formato, pero ya ha formateado la cadena usando stringWithFormat:. Solo dilo NSLog(@"%@%%", self.Ptextfield.text).
rob mayoff
Esto no funciona para UILocalNotification. Ver stackoverflow.com/a/27971848/2446178 .
JRam13
139

El código de escape para un signo de porcentaje es "%%", por lo que su código se vería así

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

Además, todos los demás especificadores de formato se pueden encontrar en Artículos de cadenas conceptuales

binarybob
fuente
Y la razón por la que \% no funciona es que la barra invertida es el carácter de escape para los literales de cadena, por lo que escribir \% en su código fuente en realidad crea una cadena que contiene un solo carácter de porcentaje.
gnasher729
17

Si eso ayuda en algunos casos, es posible usar el carácter unicode:

NSLog(@"Test percentage \uFF05");
Resh32
fuente
\uFF05que funciona para mí cuando forma parte de la NSStringen UILocalNotification, no %%. ¡Gracias!
Scott
44
Es un "signo de porcentaje de ancho completo" para usar con caracteres chinos o japoneses, muy diferente de un carácter de porcentaje ordinario.
gnasher729
7

La respuesta aceptada no funciona para UILocalNotification. Por alguna razón, %%%%(signos de 4 por ciento) o el carácter unicode ' \uFF05' solo funcionan para esto.

Para recapitular, al formatear su cadena puede usar %%. Sin embargo, si su cadena es parte de una UILocalNotification, use %%%%o \uFF05.

JRam13
fuente
6

parece que si se %%sigue con un %@, NSStringiré a algunos códigos extraños, prueba esto y esto funcionó para mí

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

Código siguiente portugués.

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

producirá: % Bhupi%

Bhoopi
fuente
0

iOS 9.2.1, Xcode 7.2.1, ARC habilitado

Siempre puede agregar el '%' por sí mismo sin ningún otro especificador de formato en la cadena que está agregando, así ...

int test = 10;

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

Para iOS7.0 +

Para expandir la respuesta a otros caracteres que podrían causarle conflictos, puede optar por usar:

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

Escrito paso a paso se ve así:

int test = 10;

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

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

O mano corta:

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

Gracias a todos los colaboradores originales. Espero que esto ayude. ¡Salud!

serge-k
fuente