博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
double float %lf %f C语言中的单精度与双精度
阅读量:2393 次
发布时间:2019-05-10

本文共 918 字,大约阅读时间需要 3 分钟。

 

最近在用 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://djgab.baihongyu.com/

你可能感兴趣的文章
Yacc使用
查看>>
C语言里面的嵌套声明的读法
查看>>
linux下gdb单步调试(中)
查看>>
写一个块设备驱动-第9章
查看>>
从头做leetcode之leetcode 5 最长回文子串
查看>>
设计模式、框架和架构的联系
查看>>
安装VMware虚拟机
查看>>
常用的设计模式和代码
查看>>
桥接模式-通俗的理解(转)
查看>>
MXML 文件中的xmlns是什么意思?
查看>>
Flex Builder 中的工作空间、项目
查看>>
Flex 获得远程数据
查看>>
Flex 添加效果的两种方法
查看>>
Flash Builder 4字体设置
查看>>
OpenGL坐标系
查看>>
C++用new和不用new创建类对象区别
查看>>
C++ C# JAVA 创建对象
查看>>
PowerDesigner 简介
查看>>
VS2008快捷键大全
查看>>
Access 操作或事件已被禁用模式阻止
查看>>