社区
C语言
帖子详情
sprintf可以精确的将float类型转换成字符马;sscanf 可以精确的转换回来吗
Arthur_
2006-09-08 10:17:14
sprintf可以精确的将float类型转换成字符马;sscanf 可以精确的转换回来吗
我昨天作了程序结果出现上面的情况,程序刚修改过,所以没有现成的,不过大家可以试验
如果浮点类型很大564645.546897
...全文
260
10
打赏
收藏
sprintf可以精确的将float类型转换成字符马;sscanf 可以精确的转换回来吗
sprintf可以精确的将float类型转换成字符马;sscanf 可以精确的转换回来吗 我昨天作了程序结果出现上面的情况,程序刚修改过,所以没有现成的,不过大家可以试验 如果浮点类型很大564645.546897
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
0黄瓜0
2006-09-08
打赏
举报
回复
double d=0.124;
printf("%f",d);
输出:0.124000
Kvci的例子二进制位数不够,float都有23位表示底数
0黄瓜0
2006-09-08
打赏
举报
回复
float只有6位左右数字是精确的,
double有10位左右数字是精确的。
注意0.00001234是4位数字,不是8位,这样看:1.234e-5
Kvci
2006-09-08
打赏
举报
回复
浮点数占4个字长。 除了保存整数部分,还要保存小数部分。且应该是以二进制形式进行运算的。
因此,对于其小数部分的所占存储长度应该是有限的。如果刚好能表示成一个二进制小数的话,就可直接保存下来。如果不能的话,那编译器自动会取一个尽量接近的二进制小数保存下来。
比如说0.125 和0.124
0.125刚好是2的-3次方.(二进制: 0.001)
但0.124是没有准确的二进制值的
0.0001111111=0.1230468750
而0.00011111111=0.1240234375
相比之下0.00011111111=0.1240234375误差要小.,与0.124跟接近.
所以计算机就以0.00011111111=0.1240234375来保存这个小数拉
所以在机器上显示最后的会都是.124023
也就是多出的部分会一样拉
Kvci
2006-09-08
打赏
举报
回复
http://blog.csdn.net/Kvci/archive/2005/03/18/322750.aspx
以前有讨论着问题的拉
看我的BLOG
Arthur_
2006-09-08
打赏
举报
回复
是什么问题?
将得有道理就给分
Arthur_
2006-09-08
打赏
举报
回复
晕,打错了是
确实不精确
Arthur_
2006-09-08
打赏
举报
回复
#include <stdio.h>
int main(void)
{
float a,b;
char str[50];
scanf("%f",&a) ;
sprintf(str,"%f",a);
sscanf(str,"%f",&b);
printf("%f\n",a); // add
printf("%f\n",b); // add
if (a==b) printf("equal");
else printf("not equal");
return 0;
}
//$ gcc -o a a.c
a.c:17:2: warning: no newline at end of file
Administrator@TEST-36F63D6B7A ~
$ a
564654.132469
564654.125000 //printf
564654.125000 //printf
equal
//=====================//
看来确实精确哦
tailzhou
2006-09-08
打赏
举报
回复
#include <stdio.h>
int main(void)
{
float a,b;
char str[50];
scanf("%f",&a) ;
sprintf(str,"%f",a);
sscanf(str,"%f",&b);
if (a==b) printf("equal");
else printf("not equal");
return 0;
}
我用这个测试了一些数据,都是equal;
如果sscanf用的字符串的是用sprintf初始化的,估计是可以的。
大家多测试一下??
Kvci
2006-09-08
打赏
举报
回复
可以
hailongchang
2006-09-08
打赏
举报
回复
浮点数转化为二进制的方法和整数不一样,况且浮点数所占用的字节比char占用的肯定要多,当在浮点所占内存的区域读取第一个字节时,完全可能读到一个可打印字符
字符
串和数字
转换
C++ vs2008
字符
串和数字
转换
C++ vs2008实现
6.3
类型
转换
Project1.zip
博客源码:https://blog.csdn.net/u014411348/article/details/107175366
C中数字与
字符
串
转换
方法.doc
C中数字与
字符
串
转换
方法.doc
VC++
字符
对应表
VC++不同进制之间的
转换
,二进制十进制十六进制
字符
之间的对应关系
C++中数字与
字符
串之间的
转换
(2).docx
C++中数字与
字符
串之间的
转换
(2).docxC++中数字与
字符
串之间的
转换
(2).docx
C语言
70,021
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章