[英]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.