我一直在編程Objective-C只有幾個星期。從1987年開始,我在編程語言(如基本,Visual Basic,C++和PHP)方面的經驗更加廣泛,並且一直延續到今天。儘管在過去的5年中,我專門編寫了PHP代碼。整數精度和轉換錯誤
今天,我發現自己被Objective-C語言中認爲是位轉換錯誤的困惑所困擾。我第一次注意到這一點時,試圖分裂一個整數(84)由浮動(10.0)轉換爲浮動。這產生了8.399999,而不是我希望的8.400。我爲這個問題編寫了一個方法並繼續前進。
今天,我從NSMutableDictionary中提取(int)0。我首先將它存儲在一個NSInteger中,然後將其存儲在一個int變量中。對於這兩種情況,這些值都應爲0,但對於這兩種情況,我都會得到整數值151229568.(請參見截圖)
我記得從我的早期編程年代起,我們不得不擔心容器的大小,因爲指向用32位指針訪問一個4位值的存儲器會導致捕獲所有與其他值相關的數據,從而導致被捕獲的數字出現錯誤。隨着隱式內存管理和類型轉換成爲常態,多年來我不必擔心這種問題,現在我再次遇到這種問題,我需要對熟悉該主題的程序員給出建議和澄清在今天的編程環境中。
問題:
- 這是不正確的指針大小或者其他什麼東西的情況?
- 在後端發生了什麼以產生從0到另一個數字的轉換?
- 我能做些什麼來從我的Objective-C計算和變量賦值中獲得更好的精度和準確性?
代碼:
NSInteger hsibs = [keyData objectForKey:@"half_sibs"];
int hsibsi = [keyData objectForKey:@"half_sibs"];
//breakpoint and screen capture of variables in stack
您不能直接在字典中存儲'NSInteger'或'int'。你需要把它們包裝在一個'NSNumber'中。 – rmaddy 2014-09-12 16:41:32