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

时间:2015-10-24 18:04:20

标签: c floating-point

这是我的代码:

float x = 21.195;
printf("%.2f\n", x);
printf("%.2f\n", 21.195);

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

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

3 个答案:

答案 0 :(得分:16)

价值观不同。第一个是method(),通常是4个字节。第二个是float,通常是8个字节。

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

答案 1 :(得分:7)

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

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

21.195F

(float)21.195

此致

答案 2 :(得分:0)

当在C中定义浮点变量时,默认将其设置为 double 。所以x是设置为浮动,因为你明确提到 ,否则21.195被认为是双倍。

现在,如上所述, float 通常约为 4个字节 double 约为 8个字节。因此 float 值具有 24个有效位,精度为7位 double 具有 53个有效位,精度为15到16位

舍入函数%.2f用于将正确的数字四舍五入到小数点后两位,并且检查小数点后的第三个数字以进行四舍五入。 所以21.195在浮动中扩大到21.19499998,然后在%。2之后减少到21.19,双倍扩大到21.1950000000000001,因此减少到21.20。

希望它有所帮助!