首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言中double输出值被改变了,为何呢

2014-01-22 
C语言中double输出值被改变了,为什么呢?小程序如下:#include stdio.hmain(){double dValue 2.0printf

C语言中double输出值被改变了,为什么呢?
小程序如下:
#include <stdio.h>

main()
{
double dValue = 2.0;
printf("%d\t%f",dValue, dValue);
}
结果答案凶残的输出:0   0.000000
为什么呢?
[解决办法]
这个很好解释,尾部和前部拼接到一起,结果自然不乐观了

实际参数类型:         char *      , double     ,double
参数传递时的长度       :[ 4B    ] ,[8B       ] ,[8 B ]
格式串和对应的格式     :格式串    ,  %d  , %f 
输出时看作的长度       :[ 4 B   ] ,[ 4B],[8B   ],[4B] 最后4B是多余的,无用参数字节。
输出时直接看作的类型:const char * ,int   ,double   
输出时最终看作的类型:const  char *,int  ,float  

第2,3 两个个参数,被劈为两半

第2参数,前一半,对应 %d 格式 4B,后一半对应%f格式 8B 
差了4B,第三个参数的前4B补上。最后4B,用不上,不管他。

PS:
输出时,不论实参是double 还是 float ,
%f对应 float 数据,所以要转换成 float 输出,会造成精度丢失。
所以double 不应该使用 %f 输出。

同理,%lf 对应double,
float类型,没有必要用 %lf输出。
因为,float 表示精度太低;
不需要用%lf,这种高精度方式输出。

热点排行