2010-05-12 83 views
2

第一篇文章在這裏。在NSNumber的floatValue方法有問題 - 不知何故,它返回一個不精確的數字。這裏的問題:我存儲一串NSNumbers的在陣列中,像這樣:NSNumber floatValue不等於NSNumber的值

NSArray *a = [NSArray arrayWithObjects: 
    [NSNumber numberWithFloat:0.04f], 
    [NSNumber numberWithFloat:0.028f], 
    [NSNumber numberWithFloat:0.016f], 
    [NSNumber numberWithFloat:0.004f], 
    nil]; 

然後我嘗試檢索(例如)的第一個值: 的NSNumber N =(NSNumber的)[αobjectAtIndex: 0]; CGFloat f = [n floatValue];

在調試程序中,n表示的0.04的值(在摘要列),但2f示出的0.0399999991的值。我在這裏做錯了什麼?

謝謝大家。

回答

2

你沒有做錯任何事情。這不是特別是NSNumberCGFloat的問題。浮點數是非常普遍的,它基於2的冪,而不是10的冪。您應該閱讀this definitive articleWikipedia article

的一點是,標準浮點數只能精確地表示一個數它是1/2,1/4,1/8和,...。 1/10不是。所以你不能使用標準浮點數完全精確地表示0.1。

如果你真的需要處理它,有它對付理性的分數或十進制浮點數字例程。

+0

清除它,謝謝。換句話說,除非你先將它們四捨五入,否則絕對不要與浮點數進行==比較。謝謝。 – Mirkules 2010-05-14 07:37:41