设置为0.1的浮点数与0.1比较错误
int main() { float f = 0.1; if (f == 0.1) printf("True"); else printf("False"); }
我只是c的初学者。 我不明白上述程序的行为。 输出为false。 为什么??
0.1
是double
字面。
由于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*/