C 什么';浮点变量和常量之间的区别是什么?
这是我的密码:C 什么';浮点变量和常量之间的区别是什么?,c,floating-point,C,Floating Point,这是我的密码: float x = 21.195; printf("%.2f\n", x); printf("%.2f\n", 21.195); 我希望两个print语句都有相同的输出,但是第一个语句打印的是21.19,第二个语句打印的是21.20 有人能解释为什么输出不同吗?值不同。第一个是浮点,通常为4个字节。第二个是双字节,通常为8字节 四舍五入规则基于小数点后的第三位数字。因此,在一种情况下,该值类似于21.19499997,而另一个值类似于21.1950000000001。(这些都是
float x = 21.195;
printf("%.2f\n", x);
printf("%.2f\n", 21.195);
我希望两个print语句都有相同的输出,但是第一个语句打印的是21.19
,第二个语句打印的是21.20
有人能解释为什么输出不同吗?值不同。第一个是
浮点
,通常为4个字节。第二个是双字节,通常为8字节
四舍五入规则基于小数点后的第三位数字。因此,在一种情况下,该值类似于21.19499997,而另一个值类似于21.1950000000001。(这些都是为了用舍入和不精确的数字格式来说明问题。)默认情况下,21.195是双精度的 如果你想要一个浮动,写下:
21.195F
或
(浮动)21.195
关于当在C中定义浮点变量时,默认情况下它被设置为double。所以x被设置为float,因为您明确提到了它,否则21.195被认为是double 如上所述,float通常是4字节左右,double是8字节左右。因此,浮点值有24个有效位,精度为7位,而double有53个有效位,精度为15到16位 舍入函数%.2f用于将数字舍入到小数点后2位,并检查小数点后的第三位是否舍入。 因此,浮点数中的21.195扩展到21.19499998,然后在%.2f之后减少到21.19。如果一个21.195的双精度浮点数扩展到21.1950000000000001,因此减少到21.20
希望有帮助 对不起,戈登,当我键入浮点数以否定的方式证明(这里是你最喜欢的神)的存在时,没有看到你回答,因为它们显然是(这里是你最喜欢的邪恶化身)的作品:-)感谢您的帮助。(^^^^)实际值为和。注意:,根据
FLT_EVAL_方法
和其他因素,输出可能是相同的。也感谢您的帮助。^^^没有“默认”-浮点变量声明为float
,双变量声明为double
。您似乎在谈论21.195
,它是一个文本,而不是一个变量。关于文字的规则是,如果它包含
且没有后缀,则它是一个双精度
;如果它有一个f
后缀,那么它就是一个float
@M.M:是的,我的意思是一样的。当声明为x时,21.195为变量,而21.195本身为文字。回答中没有提到那一点。谢谢你指出这一点。