| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 805 人关注过本帖
标题:判断条件的一个问题
只看楼主 加入收藏
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
判断条件的一个问题
我编写的一个程序如下:
#include<stdio.h>
main()
{
int a;
float b;
for(a=0;a<5;a++)
{
  b=(float)a/10;
  if(b==0.3) break;
  printf("%d,%f",a,b);
  printf("\n");
}
}
我想要的结果是输出:
0,0.000000
1,0.100000
2,0.200000
3,0.300000
结果他输出的结果连
4,0.400000
也出来了,那个判断条件没有起作用,但是我如果把条件
换成a==3就能输出我要的结果,那个条件该怎样设置呢?
2011-11-25 13:42
hxcet
Rank: 4
等 级:业余侠客
帖 子:78
专家分:229
注 册:2011-11-15
收藏
得分:12 
float和double类型的数据不能直接用“==”做判断条件,还有你这里本意是想输出到“3,0.300000”的话是应该用b和0.4做比较而不是和0.3
#include<stdio.h>
#include<math.h>
main()
{
int a;
float b;
for(a=0;a<5;a++)
{
  b=(float)a/10;
  if(b==0.3) break; 改成if(fabs(b-0.4)<1.0e-7) break;就好啦
  printf("%d,%f",a,b);
  printf("\n");
}
}


[ 本帖最后由 hxcet 于 2011-11-25 14:23 编辑 ]
2011-11-25 14:11
于祥
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1047
专家分:4132
注 册:2011-4-24
收藏
得分:4 
#include<stdio.h>
#include<math.h>
void main()
{
int a;
float b;
for(a=0;a<5;a++)
{
  b=(float)a/10;
  if(fabs(b-0.4)<1.0e-7); break;
  printf("%d,%f",a,b);
  printf("\n");
}
}这样就行,最好不要将两个浮点数进行直接比较是否相等,因为每个编译器处理浮点数的情况不同。可以比较两数的差值的绝对值与1e-6(约等于0)的大小
。希望对你有帮助。

最基础的往往是你最容易忽略的!
2011-11-25 15:07
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
回复 2楼 hxcet
换成你的条件真的可以 运行呀,不过你的条件里的那些东西
是什么意思呢?能解释下吗?谢谢
2011-11-25 15:11
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:4 
fabs(b-0.4)求b和0.4之差的绝对值
2011-11-25 15:24
hxcet
Rank: 4
等 级:业余侠客
帖 子:78
专家分:229
注 册:2011-11-15
收藏
得分:0 
回复 4楼 小赵q1
fabs(b-0.4)就是求float型数据(b-0.4)的绝对值,这里的1.0e-7是一个很小的接近与0的float型数,当fabs(b-0.4)<1.0e-7时,即是指b非常接近0.4,也就相当与你所想的b==0.4了
记住,float和double类型的数据做判断条件时不能直接用“==”,这样做是错误的,正确做法就是fabs(b-0.4)<1.0e-7

[ 本帖最后由 hxcet 于 2011-11-25 18:06 编辑 ]
2011-11-25 18:05
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
回复 6楼 hxcet
fabs(b-0.4)<1.0e-7
1.0e-7的值是0.0000007,
在这里如果b的值是0.3的话,也就是说-0.1的绝对值与0.0000001比较吗?
这里的-7可以改动吗?也就是改成-4或者-3什么的,我在程序里改了下没有什么区别,
还请解释下,谢谢,今天想到算10的阶乘,然后在结果是一位数时输出结果并输出1,
是2位数的时候输出结果并输出2,是三位数的时候输出结果并输出3,里面需要用到这样的条件,
一直不知道原理是什么,
谢谢
2011-11-25 19:53
hxcet
Rank: 4
等 级:业余侠客
帖 子:78
专家分:229
注 册:2011-11-15
收藏
得分:0 
回复 7楼 小赵q1
你的程序是要输出到3,0.300000,所以你的b要在b为0.4的时候再break而不是0.3,如果是0.3的话,就是拿0.1和0.0000001比较,那么只能输出到2,0.200000
至于那个1.0e-7实际就是指一个很小的数,一般都要用的1.0e-6甚至更小的数,这里的指数不要用大于-6的数,这是由float类型的精度决定的,如果你改为-3,在这道题中是可以的,但是换一道里面有较高精度float类型值的题或许就不行了

[ 本帖最后由 hxcet 于 2011-11-25 22:17 编辑 ]
2011-11-25 22:08
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
回复 8楼 hxcet
谢谢,现在理解的差不多了,分多给你点呵呵。
2011-11-25 22:45
快速回复:判断条件的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023989 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved