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,这种高精度方式输出。