2011-09-29 212 views
0

我面臨一個小問題,我想知道:爲什麼?字符串中帶整數值的浮點格式變量

在這裏我們有一些字符串:

[NSString [email protected]"%.3f/%.3f/%.3f/%i", 1.0, 1.0, 1, 1]; 

在這種情況下,結果是1.000/1.000/1/阿布拉 - kadabra像34875689。 爲什麼會發生?當然,我知道,當我們將第三個值更改爲1.0時,一切都會好起來的。 所以,請說明這個操作的深層過程。

回答

2

由於您編寫了%f,編譯器期望float但識別int。編寫1而不是1.0告訴編譯器它是一個整數常量而不是1.0,這是一個浮點常量。

+0

是的。一切都是正確的。但是,我想知道,在這種情況下,爲什麼它對第四價值有不良影響。 +1 – Vov4yk

+0

哦好吧,我會假設編譯器將4個值彼此相鄰存儲,而不存儲有關它們類型的信息。所以在運行時格式字符串正在填充它只需要格式指示器和它們的相應字節數來填充它們。由於一個整數用比浮點數少的字節表示,所以它會變得很混亂,並且簡單地從內存中取出一些垃圾來填充指定的浮點數...... – user387184

+0

hm。這似乎是真的。這很有道理。 – Vov4yk