double float %lf %f C语言中的单精度与双精度

 

最近在用 sscanf 读取一个浮点数,显示总是出错,后来发现是 double 和float 赋值的问题,现把过程粘出来,便与以后记忆;

代码如下:

//test
char tempppp[50] = {0};
strcpy(tempppp, "npt=11.0-34.23");
double a,b;
sscanf(tempppp, "npt=%f-%f", &a, &b);
printf("a= %f, b= %f \n", a, b);

打印出来的结果如下:

a= 1048576.000000, b= 13378822144.000000

很明显是错的。

后来查资料发现, 单精度和双精度是不能相互赋值的,正确的赋值方式是:

%lfdouble 变量赋值, 用 %ffloat 变量赋值,不能混着来,

显示的时候无所谓,用 %f ,%lf  都可以。

修改之后的代码如下:

//test
char tempppp[50] = {0};
strcpy(tempppp, "npt=-11.0--34.23");
float a,b;
sscanf(tempppp, "npt=%f-%f", &a, &b);
printf("a= %f, b= %f \n", a, b);
printf("a= %lf, b= %lf \n", a, b);
strcpy(tempppp, "npt=-11.0--34.23");
double c,d;
sscanf(tempppp, "npt=%lf-%lf", &c, &d);
printf("c= %lf, d= %lf \n", c, d);
printf("c= %f, d= %f \n", c, d);

打印的结果如下:

a= -11.000000, b= -34.230000
a= -11.000000, b= -34.230000
c= -11.000000, d= -34.230000
c= -11.000000, d= -34.230000

总结:单精度双精度数存储格式完全不同,且没有线性的转换关系,赋值时只能用对应的格式赋值。

参考文章:http://www.cnblogs.com/BradMiller/archive/2010/11/25/1887945.html

你可能感兴趣的:(C/C++)