2011-01-26 57 views
2

我是Obj-C的noob,但今天我遇到了一些我自己用NSNumber和intValue無法理解的東西。NSNumber和intValue:怪異行爲

我有這樣的例子代碼:

double quota = 203/100.0;  
    NSLog(@"%f %f %@ %d", 
    quota, 
    quota*100.0, 
    [NSNumber numberWithDouble:(quota*100.0)], 
    [ [NSNumber numberWithDouble:(quota*100.0)] intValue] 
); 

它打印輸出:

2.030000 203.000000 203 202 

請有人可以幫助我瞭解爲什麼最後的intValue變成了202 203? 我覺得我錯過了一些非常明顯而重要的東西。

TIA

回答

4

我跑你的代碼和203/100.0 = 2.0299999999999998的結果,而作爲雙存儲。它看起來像NSNumber以及%f將它四捨五入到2.03時打印它,但是當您得到的int值爲202.99999999999998 .99999999999998正在被刪除。希望有人(或者我的編輯自己)可以添加爲什麼在打印double值時發生舍入行爲。

+0

感謝您的回答喬,這似乎真的很奇怪,因爲我期望intValue返回最接近的int值。畢竟蘋果引用告訴我返回值是「接收者的值爲int,根據需要進行轉換」。我希望有人能澄清這個概念。 – Billo 2011-01-26 15:37:25