Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 什么';浮点变量和常量之间的区别是什么?_C_Floating Point - Fatal编程技术网

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本身为文字。回答中没有提到那一点。谢谢你指出这一点。