整形和浮点型比较

beefliu 2011-10-03 11:32:56

int i=1;
double j=1.0;
cout<<(i==j)<<endl;


比较一个整形和浮点型
这样能得到准确值吗
...全文
1044 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
poxuw 2011-10-05
  • 打赏
  • 举报
回复
为什么double 不能用来比较?
qq120848369 2011-10-03
  • 打赏
  • 举报
回复
if( fabs(i-j)<1e6 )
{
printf("Hello World");
}
Vincent_Song 2011-10-03
  • 打赏
  • 举报
回复
默认类型转换,低字节的会向高字节的类型自动转换,产生一个中间临时变量进行比较!
wutongye1216 2011-10-03
  • 打赏
  • 举报
回复
double型的都是存在误差的,位数少的时候还无所谓,位数多了好像在内存中实际存储的数值已经发生变化了,所以才会出错。[Quote=引用 4 楼 beefliu 的回复:]
引用 2 楼 namelij 的回复:

doubel a;
if ( a>-0.0000001 &amp;&amp; a< 0.000001 )对。
而 if( a == 0 )不对!

如果是某一变量是int类型,就不需要那样了。
如 int a;
可直接使用 if( a == 0 ) 正确!


C/C++ code
int getNumOfDecim……
[/Quote]
a128vs 2011-10-03
  • 打赏
  • 举报
回复
它有结果?是1?
beefliu 2011-10-03
  • 打赏
  • 举报
回复
如果把
floor(j)换成int(j)呢
yby4769250 2011-10-03
  • 打赏
  • 举报
回复 1
这个是绝对不行的,如果你了解浮点数的数据格式,你应该清楚,单精度的浮点数在内存中是这样表示的,单精度浮点数4字节,那么表示为:1bit符号位,8bit指数位和23bit的尾数,双精度为8字节,表示为1bit符号位,11bit指数位和52bit的尾数。
拿单精度来举例,float f = 1.0f;在内存中的表示是0 01111111 00000000000000000000000,而整型的int i = 1;在内存中的表示为 00000000000000000000000000000001,所以,很明显的看出,你直接
if ( i == f )的话,显然是比不出来的
beefliu 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kf44444 的回复:]

引用楼主 beefliu 的回复:
C/C++ code

int i=1;
double j=1.0;
cout<<(i==j)<<endl;



比较一个整形和浮点型
这样能得到准确值吗

先不说能不能比较,cout<<(i==j)<<endl; 这个会输出准确值吗?(就算i j类型一样)
[/Quote]
输出1或者0啊 BOOL
beefliu 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 namelij 的回复:]

doubel a;
if ( a>-0.0000001 && a< 0.000001 )对。
而 if( a == 0 )不对!

如果是某一变量是int类型,就不需要那样了。
如 int a;
可直接使用 if( a == 0 ) 正确!
[/Quote]
int getNumOfDecimal(double i)
{
int num=0;
for(int a=10;;a=a*10)
{
double j=i*a;
if(floor(j)==j)
{
if(num!=0)
num++;
return num;
}
num++;
}
}

我写的函数 想得到小数点后有多少位有效数字
红色那句有问题吗,我测试了下 (除了位数太多得不到准确值外 ,其他都可以得到)
淡然一笑 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 beefliu 的回复:]
C/C++ code

int i=1;
double j=1.0;
cout<<(i==j)<<endl;



比较一个整形和浮点型
这样能得到准确值吗
[/Quote]
先不说能不能比较,cout<<(i==j)<<endl; 这个会输出准确值吗?(就算i j类型一样)
  • 打赏
  • 举报
回复
doubel a;
if ( a>-0.0000001 && a< 0.000001 )对。
而 if( a == 0 )不对!

如果是某一变量是int类型,就不需要那样了。
如 int a;
可直接使用 if( a == 0 ) 正确!
  • 打赏
  • 举报
回复
不能,在比较的时候,会将int提升为double,而double是不能用==来比较的

64,701

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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