c语言实型变量问题

c语言里这一段

#include <stdio.h>
void main( )
{float f;

f=32.17;

printf("f=%f\n",f);}

为什么运行后 显示的是 f=32.169998而不是32.17呢?最好讲一下详细步骤

在C编译系统中,系统默认所有的的浮点型数据为双精度的(也就是double型)。你把一个双精度的数据赋值给一个单精度数据好比把实形数据赋值给整形数据。这样系统就会进行适当的取舍,就会影响到你数据的精度。最终形成了你所说的现象。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-10-20
因为浮点数常量默认是double类型, 从double转换到float类型会引起截断。
第2个回答  2019-04-22
1
其实%f%lf都一样,都是输出double类型的。
2
当参数即上面的4.0/3.0被传递到printf时,float总是会被转化成double类型的,然后才能背printf正确输出。
3
无论是%f还是%lf,只要不指定
精确度和宽度
,默认的输出都是
小数点
后跟6位,float和double类型只是决定那后6位有几个是有效数字。这点,cf2009000已经说的很清楚了。
4
所以,你的这几行想要输出的就是,输出两个浮点数,一个是float
一个是double。因为第3点,所以,结果都是1.333333。
相似回答