社区
C语言
帖子详情
sprintf可以精确的将float类型转换成字符马;sscanf 可以精确的转换回来吗
Arthur_
2006-09-08 10:17:14
sprintf可以精确的将float类型转换成字符马;sscanf 可以精确的转换回来吗
我昨天作了程序结果出现上面的情况,程序刚修改过,所以没有现成的,不过大家可以试验
如果浮点类型很大564645.546897
...全文
265
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
3. **`
sprin
tf
()`**: 类似于`s
scanf
()`,`
sprin
tf
()`是C标准库中的另一个函数,可以将数值格式化并写入
字符
串。 ```cpp int num = 123; char buffer[10];
sprin
tf
(buffer, "%d", num); std::string str = ...
6.3
类型
转换
Project1.zip
C语言提供了一些内建的
类型
转换
函数,如 `int atoi(const char *str)` 将
字符
串
转换
为整数,`
float
atof(const char *str)`
转换
为浮点数等。 4. 长整型和宽
字符
类型
转换
: 在C语言中,`long` 和 `long long` 是...
C中数字与
字符
串
转换
方法.doc
- `s
scanf
()`函数可以从一个
字符
串中读取格式化的数据,并将其
转换
成
指定的数据类型。 3. **Windows SDK `<shlwapi.h>`**: - `StrToInt()`函数可以将
字符
串
转换
为整数,这是Windows特有的库函数。 4. **MFC/ATL...
VC++
字符
对应表
- `s
scanf
`函数可以用于从格式化的
字符
串中读取数据并
转换
为指定类型。 #### Windows SDK - `<shlwapi.h>`中的`StrToInt`函数,适用于简单的
字符
串到整数的
转换
。 #### MFC/ATL - `CString::Format`:这个MFC类的...
C++中数字与
字符
串之间的
转换
(2).docx
- `
sprin
tf
`函数是一个广泛使用的函数,可以将整数、浮点数等
转换
为
字符
串,例如`int a=1234321;
sprin
tf
(str, "%d", a);`,`double a=123.321;
sprin
tf
(str, "%.3lf", a);`。 - `itoa`函数虽然可以把整数
转换
成
...
C语言
70,026
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章