这是我的代码:
float x = 21.195;
printf("%.2f\n", x);
printf("%.2f\n", 21.195);
我希望两个print语句具有相同的输出,但是第一个打印21.19
,第二个打印21.20
。
有人可以解释为什么输出不同吗?
答案 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。
希望它有所帮助!