新手提问,百死不得其解!谢谢!

hyq01 2008-02-25 11:10:06

#include<iostream>
using namespace std;
int main()
{
double d=1.555;
int a=static_cast<int>(100*(d+0.005));
cout<<a%10<<endl;
system("pause");
return 0;
}


预想的答案是6 ,结果却是5 ,为什么?
如果改成

#include<iostream>
using namespace std;
int main()
{
double d=1.55;
int a=static_cast<int>(10*(d+0.05));
cout<<a%10<<endl;
system("pause");
return 0;
}

输出为6
请各位高手解答!
ps DC编译
...全文
194 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
关注 接分
qiuqiu173 2008-02-28
  • 打赏
  • 举报
回复
恩,同意大家的观点
lklj123 2008-02-28
  • 打赏
  • 举报
回复
计算机内部是二进制表示的,而对于浮点数,通常不能精确表示,所以有误差存在。
虽然这个和理论上应该是6.0,但是在计算机内部表示可能是一个非常接近6.0的数字(但是小了一点点),所以截断取整后变成5了。
ni_in 2008-02-25
  • 打赏
  • 举报
回复
同意楼上的,计算机表示浮点数总是有误差的。不过这种问题肯定要有解决办法,不然大量的计算不准确就坏了。神五咋上天。
mathe 2008-02-25
  • 打赏
  • 举报
回复
计算机内部是二进制表示的,而对于浮点数,通常不能精确表示,所以有误差存在。
虽然这个和理论上应该是6.0,但是在计算机内部表示可能是一个非常接近6.0的数字(但是小了一点点),所以截断取整后变成5了。

hyq01 2008-02-25
  • 打赏
  • 举报
回复
谢谢楼上的,能否解释下原因?
星羽 2008-02-25
  • 打赏
  • 举报
回复

或者
#include<iostream>
#include "float.h"
using namespace std;
int main()
{
double d=1.555;
int a=static_cast<int>(100*(d+0.005 + FLT_EPSILON));
cout<<a%10<<endl;
system("pause");
return 0;
}

星羽 2008-02-25
  • 打赏
  • 举报
回复

1)double 问题

把 double d=1.555;
该成
double d=1.5555;



ShardowM 2008-02-25
  • 打赏
  • 举报
回复
同意mathe的观点.就象判断一个浮点数是不是0,不能用x==0.0来判断一样

33,317

社区成员

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

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