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 打赏 收藏 转发到动态 举报
写回复
用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)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧