#include<stdio.h>
int main()
{
float f = 0.1;
double d = 0.1;
printf("%lu %lu %lu %lu\n", sizeof(f), sizeof(0.1f), sizeof(0.1), sizeof(d));
return 0;
}
輸出行爲
$ ./a.out
4 4 8 8
按照上面的代碼中,我們可以看到sizeof(0.1)
和sizeof(0.1f)
不相同。 sizeof(0.1) is 8 bytes
,而sizeof(0.1f) is 4 bytes
。 ,但在分配value to float variable f
時,會自動將其大小截斷爲4 bytes
。
儘管在下面的代碼,而與浮比較它X它不截斷和4 bytes of float
與8 bytes of 0.1
相比,具有0.1f
作爲兩者的float x
匹配值是4個字節。
#include<stdio.h>
int main()
{
float x = 0.1;
if (x == 0.1)
printf("IF");
else if (x == 0.1f)
printf("ELSE IF");
else
printf("ELSE");
}
輸出
$ ./a.out
ELSE IF
爲什麼和如何分配時,而不是在比較它截斷?
'float'類型是[*單精度*浮點類型](https://en.wikipedia.org/wiki/Single-precision_floating-point_format),而'double'是一個* double precision * floating點類型。我還建議你閱讀[「是浮點數學打破?」](http://stackoverflow.com/questions/588004/is-floating-point-math-broken),它會幫助你理解爲什麼'0.1f! = 0.1'。 –
有什麼辦法解決四捨五入的問題嗎? –
@NitinTripathi永遠不要比較浮點數是否相等,並期望它們總是少量關閉。除非絕對必要,否則您也可以避免使用「float」類型。 – fuz