社区
新手乐园
帖子详情
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?
...全文
242
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)
fprintf、printf、sprintf、f
scanf
、
scanf
、s
scanf
_格式化输入输出
fprintf、printf、sprintf、f
scanf
、
scanf
、s
scanf
_格式化输入输出
目录版fprintf_s
scanf
_等格式化输入输出
带有目录查询的fprintf、printf、sprintf、f
scanf
、
scanf
、s
scanf
_格式化输入输出
s
scanf
和sprintf输入输出控制
在程序设计中有很多时候需要格式控制的,这时使用s
scanf
和sprintf就可以了
C语言中s
scanf
()函数的字符串格式化用法
介绍的是C语言中s
scanf
()函数,本文介绍了s
scanf
()函数的含义与用法,对大家日常使用C语言的s
scanf
()函数很有帮助,有需要的可以参考借鉴。
格式化输入输出浮点数据的细微
问题
(C标准:printf,
scanf
)
该文详细介绍了格式化输入输出浮点数时需要考虑的
问题
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章