社区
新手乐园
帖子详情
sscanf输出格式问题
mattlau_AT
2009-07-15 02:42:43
char num[5]=“164.4”;
float force;
sscanf(num,"%6f",&force);
我得到的结果是force=164.3999939
怎样得到164.4?
...全文
284
22
打赏
收藏
sscanf输出格式问题
char num[5]=“164.4”; float force; sscanf(num,"%6f",&force); 我得到的结果是force=164.3999939 怎样得到164.4?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
csd了个n
2010-09-04
打赏
举报
回复
这里主要的问题出在 float 浮点数 类型上
float类型的数在内存存储上是不稳定的
比如说一个数float a=25,然后你再取a的值,有可能得到25。000001或者24。999999 又或者就是25
这就是为什么你是164。39999,别人得到的是164。4
和机器也有关系
要得到164。4,你可以改成双精度 double 或者再加条语句
if (a <164.4)a=a+0.000005;
else if (a>164.4)a=a-0.000005;
有误差很正常的。。。。
某某9
2010-09-04
打赏
举报
回复
数组太短了
lzpkshy
2010-09-04
打赏
举报
回复
学习并收了。。。
Ancort
2010-08-30
打赏
举报
回复
原来还有个函数叫sscanf。。谭浩强的书害人不浅
ForestDB
2010-08-30
打赏
举报
回复
5改成6,正常的误差。
cqcwasd
2010-08-27
打赏
举报
回复
11111111111111111
jackyloncoln
2009-07-20
打赏
举报
回复
[Quote=引用楼主 mattlau_at 的回复:]
char num[5]=“164.4”;
float force;
sscanf(num,"%6f",&force);
我得到的结果是force=164.3999939
怎样得到164.4?
[/Quote]
这个结果也比较困惑我。
Dantin
2009-07-20
打赏
举报
回复
学习了
gaboyqiao
2009-07-20
打赏
举报
回复
float型数据比较方法:
const M = 0.00001;
float f;
if(f <= -M || f >= M)
{
......
}
float型数据的比较本身就不能与int型和BOOL型那样比较的。
Darkneece
2009-07-20
打赏
举报
回复
[Quote=引用 7 楼 mattlau_at 的回复:]
引用 6 楼 supermegaboy 的回复:
引用楼主 mattlau_AT 的帖子:
char num[5]=“164.4”;
float force;
sscanf(num,"%6f",&force);
我得到的结果是force=164.3999939
怎样得到164.4?
正常的误差。
关键影响接下来的比较。
[/Quote]
浮点数不能用==比较
Darkneece
2009-07-20
打赏
举报
回复
[Quote=引用 7 楼 mattlau_at 的回复:]
引用 6 楼 supermegaboy 的回复:
引用楼主 mattlau_AT 的帖子:
char num[5]=“164.4”;
float force;
sscanf(num,"%6f",&force);
我得到的结果是force=164.3999939
怎样得到164.4?
正常的误差。
关键影响接下来的比较。
[/Quote]
浮点数不能用==比较
zealour
2009-07-17
打赏
举报
回复
先不考虑类似于够不够的问题
这里主要的问题出在 float 浮点数 类型上
float类型的数在内存存储上是不稳定的
比如说一个数float a=25,然后你再取a的值,有可能得到25。000001或者24。999999 又或者就是25
这就是为什么你是164。39999,别人得到的是164。4
和机器也有关系
要得到164。4,你可以改成双精度 double 或者再加条语句
if (a<164.4)a=a+0.000005;
else if (a>164.4)a=a-0.000005;
wxdcxp
2009-07-16
打赏
举报
回复
长知识了,第一次见到sscanf
飞天御剑流
2009-07-15
打赏
举报
回复
[Quote=引用 7 楼 mattlau_AT 的回复:]
引用 6 楼 supermegaboy 的回复:
引用楼主 mattlau_AT 的帖子:
char num[5]=“164.4”;
float force;
sscanf(num,"%6f",&force);
我得到的结果是force=164.3999939
怎样得到164.4?
正常的误差。
关键影响接下来的比较。
[/Quote]
可以用很多方法进行修正啊,例如加0.5再取整等等。
Nio96
2009-07-15
打赏
举报
回复
float型的比较和int型的比较是不一样的。本来就不是个精确值。一般是误差小于多少多少这样
[Quote=引用 7 楼 mattlau_AT 的回复:]
引用 6 楼 supermegaboy 的回复:
引用楼主 mattlau_AT 的帖子:
char num[5]=“164.4”;
float force;
sscanf(num,"%6f",&force);
我得到的结果是force=164.3999939
怎样得到164.4?
正常的误差。
关键影响接下来的比较。
[/Quote]
mattlau_AT
2009-07-15
打赏
举报
回复
[Quote=引用 6 楼 supermegaboy 的回复:]
引用楼主 mattlau_AT 的帖子:
char num[5]=“164.4”;
float force;
sscanf(num,"%6f",&force);
我得到的结果是force=164.3999939
怎样得到164.4?
正常的误差。
[/Quote]
关键影响接下来的比较。
飞天御剑流
2009-07-15
打赏
举报
回复
[Quote=引用楼主 mattlau_AT 的帖子:]
char num[5]=“164.4”;
float force;
sscanf(num,"%6f",&force);
我得到的结果是force=164.3999939
怎样得到164.4?
[/Quote]
正常的误差。
mattlau_AT
2009-07-15
打赏
举报
回复
[Quote=引用 4 楼 Walf_ghoul 的回复:]
编译过不了:那个数组不够。。。
\main.cpp:6: error: initializer-string for array of chars is too long
:: === Build finished: 1 errors, 0 warnings ===
[/Quote]
你改到6
Walf_ghoul
2009-07-15
打赏
举报
回复
编译过不了:那个数组不够。。。
\main.cpp:6: error: initializer-string for array of chars is too long
:: === Build finished: 1 errors, 0 warnings ===
asksgp
2009-07-15
打赏
举报
回复
编译就不过。。。
error C2117: 'num' : array bounds overflow
f:\learn\code\090714\090714\tt.cpp(29) : see declaration of 'num'
加载更多回复(2)
s
scanf
取固定长度的int_s
scanf
一个技巧--获取int的时候十进制十六进制不同
博客主要提及使用s
scanf
时遇到的
问题
。来料数据按特定格式处理,期望输出特定结果,但使用`s
scanf
`按`%d%s%s`格式处理一个U32 + STRING + STRING数据时,`%d`无法达到预期效果,提醒要警惕`s
scanf
`的使用。
s
scanf
中的 hhx 与 hx 使用
博客介绍了C++中s
scanf
的功能,它可从字符串中格式化读出内容。在写协议栈处理MAC地址字符串时,将其读入unsigned char数组,使用s
scanf
时要注意格式匹配,如用hhx对应8位,hx对应16位,错误匹配会出现
问题
,而输出16进制用%x即可。
C/C++ | 关于s
scanf
以及sprintf函数
本文详细介绍了s
scanf
和sprintf函数的使用方法,包括基本语法、复杂格式的输入输出,以及如何将它们应用于字符串处理
问题
。通过实例展示了如何利用这两个函数进行格式化的读取和写入操作。
Linux(程序设计):16---sprintf、snprintf、s
scanf
本文详细介绍了sprintf和snprintf函数的功能及用法,演示了如何发送格式化输出到字符串,以及如何避免buffer溢出的
问题
。同时,也讲解了s
scanf
函数如何从字符串中读取格式化输入。
C标准库格式化输入输出函数详解
本文详细讲解了C标准库中的格式化输入输出函数,包括格式字符串的分类、常用转换说明符、非格式化I/O以及常见的缓冲区
问题
。重点介绍了如何正确使用
scanf
、f
scanf
和s
scanf
等函数,避免缓冲区溢出和残留
问题
,并提供了实用的解决方案。
新手乐园
33,316
社区成员
41,771
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章