社区
C语言
帖子详情
float参数的转换
「已注销」
2019-07-25 06:31:36
如图中所说,float因为在printf中,会把float转换成double,所以没有专用的转换说明,那请问%f不是float在printf中的转换说明吗,难道是double类型的转换说明?那为什么要输入一个doble类型的浮点数时,scanf要用%lf,用%f进行运算就会产生奇怪的结果?
...全文
275
9
打赏
收藏
float参数的转换
如图中所说,float因为在printf中,会把float转换成double,所以没有专用的转换说明,那请问%f不是float在printf中的转换说明吗,难道是double类型的转换说明?那为什么要输入一个doble类型的浮点数时,scanf要用%lf,用%f进行运算就会产生奇怪的结果?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
源代码大师
2021-05-06
打赏
举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
寻开心
2020-02-04
打赏
举报
回复
这是哪一本书上讲的? 很少见有对这个事情做解释的啊!
c语言当中,传递到函数里面的都是具体数值,而不是变量的本身, 参数是放到栈里面进行传递的
那么每个参数在栈里面的位置和大小就是个问题
函数可以根据参数的类型来计算参数的位置
现在的问题是,如果参数的类型和传递的类型大小不一样会如何
在固定参数的函数当中,编译器会检查他,发现这种情况会报错
但是不固定长参数怎么办,这就是个问题
楼主的那个图很好的解释了float(32bits)和double(64bits)都是统一按照double类型来入栈,这样就能解决这个问题
举个例子,大家可以在自己的编译器里面测试一下
char ch='A';
int n = 123;
printf("float:%f int:%d", c, n); // 编译器会这里给出警告,%f和c的不匹配,忽略它去执行看看会发生什么
c没有正确输出这个可以理解, 但是,但是,你会发现n也没有正确输出
不同的编译器也许执行结果不一样
可以理解, 因为格式指定了参数之间的位置关系, 入栈的格式不匹配,后续的参数定位出了问题
scanf里面这个问题不会明显,因为参数都是指针, 只是在对指针指向的地址放数据的时候,会因为格式不同而破坏数据
但是对scanf函数的参数之间不会有影响
这样的问题在不固定长度的函数参数里面应该都会有体现
apkipa1
2020-02-04
打赏
举报
回复
这是规定的,scanf 之流 和 printf 之流就是不一样的。如果你觉得记起来比较烦,可以像 4 楼那样记,因为现在的 C 语言也接受 printf 给 %lf (与 %f 完全等价)。
九十辰 (Gao Xu)
2020-02-04
打赏
举报
回复
浮点数后面加话个f就可以了
lin5161678
2020-02-04
打赏
举报
回复
printf 中参数float 会转换为double入栈
这句话的意思的 float 和 double 都是入栈 8 字节
printf 解析格式控制字符%f 会从栈里面读取8个字节的数据 作为一个double输出
所以 printf 没有针对 float的格式控制符
%f是针对double的
而scanf情况不一样
%f 还是 %lf 对应的参数都是指针 都是读取4个字节的数据
但是后面的处理有区别
%f 对应float 会向指定的内存写入 4个字节的数据
%lf 对应 double 回向指定的内存写入 8个字节的数据
因为写入字节不同 所以 %f 和 %lf 不能混用
备注 类型大小不固定 这个回答中的类型大小仅供参考
Vector_PX
2019-07-26
打赏
举报
回复
小转大是可以的,大转小是不可以的
「已注销」
2019-07-26
打赏
举报
回复
引用 1 楼 自信男孩 的回复:
%f也是可以的,可以看一下C标准,double也用%f。
为何书中说float没有转换说明呢?难道不是%f?
nice_cxf
2019-07-26
打赏
举报
回复
float是f,double是lf.
自信男孩
2019-07-25
打赏
举报
回复
%f也是可以的,可以看一下C标准,double也用%f。
float
函数python_详解
float
函数类型
转换
函数描述
float
([x]) 函数将数字或数字的字符串表示形式
转换
为与它等效的有符号浮点数。如果
参数
x是一个字符串(十进制表示的数字串),数字前面可以添加符号来表示正数,或负数。符号和数字之间不能出现空格,但是符号...
详解
float
函数类型
转换
float
([x]) 函数将数字或数字的字符串表示形式
转换
为与它等效的有符号浮点数。如果
参数
x是一个字符串(十进制表示的数字串),数字前面可以添加符号来表示正数,或负数。如果
参数
x 是一个整数或是一个浮点数,则...
C++
float
强制类型
转换
需注意的小Bug
C++
float
强制类型
转换
需注意的小Bug 假设现在有这样一个需求,将double类型的数据转成
float
,由于C++并不会执行隐式类型
转换
,因此一般的做法是用
float
强制
转换
。 示例如下:
float
b = (
float
) a; //a是double类型...
float
和int相互
转换
直接强制将
float
强制
转换
成int;最后一位丢失精度则 +0.5处理 转:http://blog.csdn.net/slshelly/article/details/7260284 串行通讯是以字节为单位进行传送的,对于浮点数和整型数都需要进行
转换
...
C语言怎么把浮点型
float
数据
转换
为字符型char数据?
C语言怎么把浮点型
float
数据
转换
为字符型char数据? 主要有两种方法,但显然都没有Python简单实用! 第一种方法 这种方法显然对
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章