概述
最近在用 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
很明显是错的。
后来查资料发现, 单精度和双精度是不能相互赋值的,正确的赋值方式是:
用 %lf 给 double 变量赋值, 用 %f 给 float 变量赋值,不能混着来,
而显示的时候无所谓,用 %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
最后
以上就是现代香烟为你收集整理的double float %lf %f C语言中的单精度与双精度的全部内容,希望文章能够帮你解决double float %lf %f C语言中的单精度与双精度所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复