2011-10-01 115 views
3

以下Objective C代碼的預期結果是什麼?「stringWithFormat:」的意外結果:

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

我以爲字符串的值將是「+01」,原來是「+1」。不知何故,格式字符串「+01」中的「0」被忽略。將代碼更改爲:

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

字符串的值現在爲「01」。它確實生成了領先的「0」。但是,如果intValue爲負數,如下所示:

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

字符串的值變爲「-1」,而不是「-01」。

我錯過了什麼嗎?或者這是一個已知的問題?什麼是建議的解決方法? 在此先感謝。

+3

我懷疑是數字給出包括符號,而不是數字的號的域的寬度。 –

+0

@Mark,你是對的。謝謝。 –

+0

@Mark Byers,評論+1。你是對的! – EmptyStack

回答

8

@Mark Byers在他的評論中是正確的。指定'0'相對於標記'+/-'填充有效數字'0'。而不是'0'使用點'.'填充有效數字與'0'無論標記

[... 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

當'intValue'爲'-1'時,第一行會產生'+ 0-1'。當'intValue'爲'1'時,第二行會產生'-01'。 – EmptyStack

+0

因此,如果值小於0或大於0,您可以使用if條件進行檢查。 – leena

+0

好的。問題不在於在號碼前添加額外的0。它關於用0填充數字,如果實際數字小於2位;-) – EmptyStack