这是我的代码:
float x = 21.195;
printf("%.2f\n", x);
printf("%.2f\n", 21.195);
我本来以为两个打印语句会输出相同的结果,但实际上第一个输出21.19
,第二个输出21.20
。
有人能解释一下为什么会出现这种差异吗?
这是我的代码:
float x = 21.195;
printf("%.2f\n", x);
printf("%.2f\n", 21.195);
我本来以为两个打印语句会输出相同的结果,但实际上第一个输出21.19
,第二个输出21.20
。
有人能解释一下为什么会出现这种差异吗?
float
,通常为4个字节。第二个是double
,通常为8个字节。默认情况下,21.195是一个双精度数。
如果你想要一个单精度数,请写:
21.195F
或者
(float)21.195
祝好!
在C语言中定义浮点变量时,默认情况下它被设置为双精度(double)。所以如果你没有显式地指定,21.195会被认为是double类型,而x被显式地设置为float类型。
如上所述,float通常占用4个字节,而double占用8个字节。因此,一个float值有24个有效位数,能够精确表示7位数字;而double拥有53个有效位数,能够精确表示15到16位数字。
一个四舍五入函数 %.2f 用于将数字四舍五入到小数点后两位,并检查小数点后第三位来进行取整。因此,在float中,21.195扩展为21.19499998,然后通过%.2f减少到21.19;而在double中,21.195扩展为21.1950000000000001,因此减少到了21.20。
希望这可以帮助到你!
float
,声明双精度变量为 double
。您似乎在谈论 21.195
,这是一个字面值,而不是一个变量。关于字面值的规则是,如果它包含 .
且没有后缀,则为 double
;如果它有一个 f
后缀,则为 float
。 - M.M
FLT_EVAL_METHOD
和其他因素,输出可能相同。 - chux - Reinstate Monica