printf浮点变量和常量之间有什么区别?

Tam*_*ara 13 c floating-point

这是我的代码:

float x = 21.195;
printf("%.2f\n", x);
printf("%.2f\n", 21.195);
Run Code Online (Sandbox Code Playgroud)

我希望两个打印语句具有相同的输出,但相反,第一次打印21.19,第二次打印21.20.

有人能解释为什么输出不同吗?

Gor*_*off 16

价值观不同.第一个是a float,通常是4个字节.第二个是a double,通常是8个字节.

舍入规则基于小数位后的第三位数.因此,在一种情况下,值类似于21.19499997,而另一个21.1950000000001,或类似的东西.(这些用于说明舍入和不精确的数字格式的问题.)


Emm*_*RIN 7

默认情况下,21.195是双倍的.

如果你想要一个浮点数,写:

21.195F

要么

(float)21.195

问候