2011-08-26 67 views
0

好的....這似乎是一個簡單的問題,但我找不到任何有關它的信息,所以我想我會問這裏。簡單的問題int

我試圖存儲在一個變種數(INT),但我需要保持0的前

如:

int x = 0001; 
NSLog(@"%i",x) // returns 1 

是否有可能使它回到0001?

我知道我能做到這一點:

NSLog(@"%04i",x); // returns 0001 

但是,這是不太我期待的,因爲0的需求數量來改變答案。

我並不特別需要使用int,但它需要是一個整數。

+3

在C中,以'0'開始的數字常量被解釋爲八進制。如果您需要特定格式,請使用實數整數並在輸出時填充它,或使用字符串。 – geoffspear

+1

爲什麼它必須是一個整數? –

+2

你能解釋你想要做什麼嗎?你打算如何用前導零來使用這個整數?實現目標可能有更好的方法,但我們需要了解更多。 – James

回答

0

如果您需要字符串而不是值,則需要使用字符串變量。

NSString *x = @"0001"; 
NSLog(@"%@",x); 

然後當你需要做一些計算時,使用「[x intValue]」。

+3

這是倒退... – Blindy

+0

@Flyingdiver當然,將它保存爲一個字符串....我知道這將是一個簡單的那樣。我的大腦此刻有點油炸。謝謝Flyingdiver這是我需要的答案。 – EcksMedia

+0

@Bindind:如果由於一些可怕的原因,0的數量確實是OP所代表的數據的重要部分,那麼不是。 – geoffspear

0

除了使用一個你不想要的字符串外,在第一個有效數字存儲double,0.0001之前,我可以看到編碼0的數目的唯一方法。當然,在某些情況下,精度可能是一個問題,而不是提到這種整型表示的算術變得更加困難。

0

我認爲你要顯示的零的數量不是你的模型(實際的後備存儲,則int)的一部分,但呈現的(這樣的功能把你的int並以某種方式顯示它) 。

無論如何,初等數學告訴我們101的數字相同,因此您將很難說服任何不同的計算機。

+0

這實際上並沒有回答這個問題,對嗎? – Flyingdiver

+0

考慮到你的答案,不,我不相信你會明白它的答案。 – Blindy

6

前導0是無關緊要的,並且將它們添加到make the number an octal literal,因此您無法在指定寬度時記錄它們。但是,您可以指定要打印的動態寬度。

int dyn_width = 4; 
int x = 1; 

NSLog(@"%0*i", dyn_width, x); 
+0

+1我喜歡這個答案,不知道你能做到這一點!我實際上正在考慮爲另一個'printf'函數(或obj-c等價物)'格式化字符串'sprintf'。 – Blindy

+0

@Joe我喜歡這個想法。我沒有意識到你可以做到這一點。這是我以爲它可以工作,但我找不到任何文檔。 – EcksMedia

+1

這裏你去http://pubs.opengroup.org/onlinepubs/009695399/functions/printf.html搜索「字段寬度」,你會看到'*'解釋。 – Joe

0

你有兩個選擇 - 創建一個對象,既保持INT-值(1)填充數(3)和填充類型(零),或使用字符串。使用一個字符串可能會導致其他問題(驗證,你可以停止代碼的其他部分把字符串數據像文字在那裏?)

但是,真正的問題是,你爲什麼要這.. ..肯定還有另一種方式?代碼重構時間!