社区
C语言
帖子详情
float参数的转换
「已注销」
2019-07-25 06:31:36
如图中所说,float因为在printf中,会把float转换成double,所以没有专用的转换说明,那请问%f不是float在printf中的转换说明吗,难道是double类型的转换说明?那为什么要输入一个doble类型的浮点数时,scanf要用%lf,用%f进行运算就会产生奇怪的结果?
...全文
253
9
打赏
收藏
float参数的转换
如图中所说,float因为在printf中,会把float转换成double,所以没有专用的转换说明,那请问%f不是float在printf中的转换说明吗,难道是double类型的转换说明?那为什么要输入一个doble类型的浮点数时,scanf要用%lf,用%f进行运算就会产生奇怪的结果?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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 完全等价)。
九十辰
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是一个字符串(十进制表示的数字串),数字前面可以添加符号来表示正数,或负数。符号和数字之间不能出现空格,但是符号前面和数字后面允许出现空格。如果
参数
x 是一个整数或是一个浮点数,则返回与它等效的浮点数;如果 x 超出了
float
类型的范围,则引发 OverflowError 错误。如果
参数
...
C++
float
强制类型
转换
需注意的小Bug
C++
float
强制类型
转换
需注意的小Bug 假设现在有这样一个需求,将double类型的数据转成
float
,由于C++并不会执行隐式类型
转换
,因此一般的做法是用
float
强制
转换
。 示例如下:
float
b = (
float
) a; //a是double类型 看上去这个
转换
人畜无害,但请见下面示例: 可以看到,a原来是463440.620,而转成
float
类型,变成了463440.625,损失了相当的精度。 究其原因,其实是
float
用32位存储,只能保证6 ~7位的有效数字,而double是64
float
和int相互
转换
直接强制将
float
强制
转换
成int;最后一位丢失精度则 +0.5处理 转:http://blog.csdn.net/slshelly/article/details/7260284 串行通讯是以字节为单位进行传送的,对于浮点数和整型数都需要进行
转换
字节数组才能进行通讯。 MCU和PC的浮点数都是基于IEEE754格式的。有4字节(
float
)、8字节(d
C语言怎么把浮点型
float
数据
转换
为字符型char数据?
C语言怎么把浮点型
float
数据
转换
为字符型char数据? 主要有两种方法,但显然都没有Python简单实用! 第一种方法 这种方法显然对
java int
转换
float
_java
float
转换
int
1.Java的简单类型及其封装器类⑴Java简单类型与封装类我们知道,Java语言是典型的支持面向对象的程序语言,但考虑到有些基本数据类型的结构简单,占内存小且存取速度快等优点,Java依然提供了对这些非面向对象的简单数据类型的支持。当然,Java在提供大量的其它类时,也提供了与简单数据类型对应的封装类,于是,Java中就有了诸如int和Integer(
float
和
Float
、double和Dou...
C语言
69,373
社区成员
243,079
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章