1. 程式人生 > >判斷兩個( float )變數是否相等以及和 0 值比較方法

判斷兩個( float )變數是否相等以及和 0 值比較方法

float 型: 佔 4 位元組,7 位有效數字

double 型:佔 8 位元組,15~16 位有效數字

浮點數的表示是不精確的,float 和 double 都不能保證可以把所有實數都準確的儲存在計算機中。測試例子如下:

  1. #include <stdio.h>
  2. int main(int argc, char *argv[])  
  3. {  
  4.     float f = 99.9f;  
  5.     printf("f = %f\n", f);  
  6.     return 0;  
  7. }  

執行結果如下:


由於浮點數的表示是不精確的,所以不能直接比較兩個數是否完全相等

。一般都是在允許的某個範圍內認為某個個浮點數相等,如有兩個浮點數a、b,允許的誤差範圍為 1e-6,則 abs(a-b) <= 1e-6,即可認為 a 和 b 相等。

  1. #include <stdio.h>
  2. #include <stdlib.h> //abs()
  3. int main(int argc, char *argv[])  
  4. {  
  5.     float a = 10.55f;  
  6.     float b = 10.55f;  
  7.     if( abs(a-b) <= 1e-6 ){  
  8.         printf("a 等於 b\n");  
  9.     }else
    {  
  10.         printf("a 不等於 b\n");  
  11.     }  
  12.     return 0;  
  13. }  

還有一種方法就是擴大再取整,比如 a=5.23、b=5.23,直接比較 a==b 有可能為 false,但是 a 和 b 都擴大一百倍,然後強制轉換為 int 型別,再用 == 比較就可以了。

  1. #include <stdio.h>
  2. int main(int argc, char *argv[])  
  3. {  
  4.     float a = 5.23;  
  5.     float b = 5.23;  
  6.     if( (int)(a*100) == (int)(b*100) ){  
  7.         printf("a 等於 b\n");  
  8.     }else{  
  9.         printf("a 不等於 b\n");  
  10.     }  
  11.     return 0;  
  12. }  

float 型變數和“零值”比較的方法:

  1. #include <stdio.h>
  2. int main(int argc, char *argv[])  
  3. {  
  4.     float x = 0.000f;  
  5.     constfloat EPSINON = 0.000001;  
  6.     if (( x >= -EPSINON ) && ( x <= EPSINON ))  
  7.     {  
  8.         printf("x 是零\n");  
  9.     }  
  10.     return 0;  
  11. }  

浮點型變數並不精確,其中 EPSINON 是允許的誤差(即精度),所以儘量不要將 float 變數用 “==” 或 “!=” 與數字比較,應該設法轉化成 “>=” 或 “<=” 形式。