设置为0.1的浮点数与0.1比较错误

int main() { float f = 0.1; if (f == 0.1) printf("True"); else printf("False"); } 

我只是c的初学者。 我不明白上述程序的行为。 输出为false。 为什么??

0.1double字面。

由于0.1无法在浮点中精确表示,因此设置为0.1的float将将false与double设置为0.1进行比较。

如果使用float字面值,则比较将按预期运行: 0.1f (注意后缀f :不要与变量名混淆):

 float foo /*renamed for clarity*/= 0.1; if (foo == 0.1f){ /*this will compare true*/