Bagaimana cara menambahkan tanda persen ke NSString

456

Saya ingin memiliki tanda persentase di string saya setelah satu digit. Sesuatu seperti ini: 75%.

Bagaimana saya bisa melakukan ini? Saya mencoba:

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

Tetapi itu tidak berhasil untuk saya.

Ilya Suzdalnitski
sumber

Jawaban:

943

Kode untuk NSStringformat masuk persen adalah %%. Ini juga berlaku untuk NSLog()dan printf()format.

mouviciel
sumber
Saya mencoba NSLog ([NSString stringWithFormat: @ "% @ %%", self.Ptextfield.text]); dan hasilnya adalah hanya menggunakan uitextfield.text
Ali
2
NSLogmemperlakukan argumen pertamanya sebagai format string, tetapi Anda telah memformat string menggunakan stringWithFormat:. Katakan saja NSLog(@"%@%%", self.Ptextfield.text).
rob mayoff
Ini tidak berfungsi untuk UILocalNotification. Lihat stackoverflow.com/a/27971848/2446178 .
JRam13
139

Kode melarikan diri untuk tanda persen adalah "%%", sehingga kode Anda akan terlihat seperti ini

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

Juga, semua penentu format lainnya dapat ditemukan di Artikel Konseptual String

binarybob
sumber
Dan alasan mengapa \% tidak berfungsi adalah backslash adalah karakter pelarian untuk string literal, jadi mengetikkan \% dalam kode sumber Anda benar-benar membuat string yang berisi karakter persen tunggal.
gnasher729
17

Jika itu membantu dalam beberapa kasus, dimungkinkan untuk menggunakan karakter unicode:

NSLog(@"Test percentage \uFF05");
Resh32
sumber
\uFF05bekerja untuk saya ketika itu adalah bagian dari NSStringdalam UILocalNotification, tidak %%. Terima kasih!
Scott
4
Itu adalah "tanda persen lebar penuh" untuk digunakan dengan karakter Cina atau Jepang, sangat jauh berbeda dari karakter persen biasa.
gnasher729
7

Jawaban yang diterima tidak berfungsi untuk UILocalNotification. Untuk beberapa alasan, %%%%(tanda 4 persen) atau karakter unicode ' \uFF05' hanya berfungsi untuk ini.

Jadi untuk rekap, saat memformat string Anda dapat Anda gunakan %%. Namun, jika string Anda adalah bagian dari UILocalNotification, gunakan %%%%atau \uFF05.

JRam13
sumber
6

Sepertinya jika %%diikuti dengan %@, NSStringakan pergi ke beberapa kode aneh coba ini dan ini berhasil untuk saya

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

kode berikut ini.

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

akan menampilkan: % Bhupi%

Bhoopi
sumber
0

iOS 9.2.1, Xcode 7.2.1, ARC diaktifkan

Anda selalu dapat menambahkan '%' dengan sendirinya tanpa penentu format lain dalam string yang Anda tambahkan, seperti ...

int test = 10;

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

Untuk iOS7.0 +

Untuk memperluas jawaban ke karakter lain yang dapat menyebabkan konflik, Anda dapat memilih untuk menggunakan:

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

Ditulis langkah demi langkah seperti ini:

int test = 10;

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

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

Atau tangan pendek:

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

Terima kasih kepada semua kontributor asli. Semoga ini membantu. Bersulang!

serge-k
sumber