簡體   English   中英

比較目標C中的float和double數據類型

[英]Comparing float and double data types in objective C

當在iPhone應用程序中使用double或float數據類型時,我遇到了“> =”和“<=”比較的問題,因為當為變量分配一個帶有一個小數位的數字時,例如4.2,浮點數或雙精度數用於比較實際上可能有一個值,如4.1999998092651367。 由於這種差異,諸如“> = 4.2”的比較是假的而不是真的。 我該如何避免這個問題?

當為變量分配一個帶有一個小數位的數字時,例如4.2,比較中使用的float或double實際上可能有一個值,例如4.1999998092651367

沒有可能 會的 再具體一點:

float f = 4.2;  // f is exactly 4.19999980926513671875
double d = 4.2; // d is exactly 4.20000000000000017763568394002504646778106689453125

當你寫下這樣的東西時會出現問題:

float f = 4.2;
if (f >= 4.2) {
    // this block of code is not executed.
}

f正好是4.19999980926513671875 ,但是您將它與雙精度字面值 “4.2”進行比較,其值為4.20000000000000017763568394002504646778106689453125 ,因此比較失敗。 相反,如果您與單精度字面值“4.2f”進行比較:

float f = 4.2;
if (f >= 4.2f) {
    // this block of code is exectued.
}

比較成功,因為值完全相等。 浮點很復雜,但它完全是確定性的; 您可以做的最簡單的事情之一就是不要混合精確度。 如果您正在使用float ,請確保所有文字都以f為后綴,以使它們具有單精度。

(這也可以提高性能,但這不是理由;執行此操作的原因是因為它會使您的代碼更正確)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM