本文共 918 字,大约阅读时间需要 3 分钟。
最近在用 sscanf 读取一个浮点数,显示总是出错,后来发现是 double 和float 赋值的问题,现把过程粘出来,便与以后记忆;
代码如下:
//testchar 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 都可以。
修改之后的代码如下:
//testchar 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://djgab.baihongyu.com/