可能重複:
strange output in comparision of float with float literal爲什麼在'if'條件下浮點值條件失敗?
下面是代碼
#include<stdio.h>
int main()
{
float a=0.3;
if(a==0.3)
printf("Hello World!");
else
printf("Stack Overflow");
return 0;
}
我的預期輸出的 「Hello World」。但是我得到了「堆棧溢出」。爲什麼我沒有得到「Hello World」?
if條件有問題嗎?
沒有做過'C'但我想這應該是浮'一== 0.3f'; –
在這種情況下,'a'被提升爲'double',因爲'0.3'是一個雙字面值。由於'0.3'不能完全表示,所以比較失敗。 –
大衛說:「(double)(float)(0.3)'不等於'0.3',因爲前者在整個過程中四捨五入爲精確的,而後者保留了double精度。以10爲底的比喻,假設我拿'1/3'代表3位有效數字:'0.333'。這就是「浮動」a「。現在將「a」的值轉換爲有效數字爲6的值(「double」):「0.333000」。這不等於'0.333333'(三分之一的值爲「雙倍」)。 –