2013-04-03 61 views
4

我不好意思問這個,但我運行iOS 6.1及以下行返回False:浮動比較

if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.1) 

但下列返回true:

if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.1f) 

爲什麼?

+0

雙精度浮點比單精度浮點更精確,因此這些值可能會有所不同。 **有可能重複**,請看這裏:http://stackoverflow.com/questions/15581535/what-is-the-point-of-using-f-when-assigning-a-value-to-a- cgfloat/15581658 –

+0

當使用iOS系統版本時我檢索完整的字符串(例如6.1.3,我將它分成由'。'分隔的部分,然後從這些值創建一個NSIndexPath,然後可以使用比較您的系統版本另一個NSIndexPath,並且不會出現真正的數字精度問題。對不起,我現在沒有代碼,但是您應該能夠從我剛剛告訴您的方法中複製我的方法 –

+1

http:// stackoverflow .COM /問題/ 1614533 /奇怪的問題比較,浮動式目標-C – meth

回答

0

相當多的閱讀後,我的這種情況的原因的理解如下:

•像1.2的雙C治療號,如果修改和f如1.2F爲float •既不雙打也不漂浮可通過用100%的準確度 •爲浮子的表示錯誤的系統內部表示比爲雙打

THEREFOR比較浮子到雙將主要導致更高的令人誤解的結果。對於非關鍵系統,比較2個浮點就足夠了。

1

在比較之前,浮標會變成雙倍。 f表示小數位數。當您更改小數

1

在第一個systemVersion的數量從float轉換爲double和它的值取決於你用多少位來表示它

在第二個你在比較兩個不同的號碼你在比較兩個浮點數