| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2158 人关注过本帖, 1 人收藏
标题:简单的问题,但自己不会
只看楼主 加入收藏
gukai1991
Rank: 2
等 级:论坛游民
帖 子:19
专家分:51
注 册:2011-2-19
结帖率:66.67%
收藏(1)
已结贴  问题点数:5 回复次数:29 
简单的问题,但自己不会
#include<iostream>
#include<conio.h>
using namespace std;

int main()
{
    double a=3.3,b=1.1;
    int i=a/b;
    cout<<i<<endl;
    getch();
    return 0;
}

为什么最后i=2呢
搜索更多相关主题的帖子: include double 
2011-03-24 23:52
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:1 
你应该把无关的代码移除掉

2011-03-25 08:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
程序代码:
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    double a=3.3,b=1.1;

    double c = a/b;
    cout << setprecision(18) << c << endl;

    int i = c;
    cout << i << endl;

    return 0;
}
输出为
2.9999999999999996
2

如果你想问 3.3/1.1 为什么不等于 3,那你把 3.3/1.1的结果转化为int干吗?
如果你想问 2.9999999999999996 转化为int为什么不是3,那你应该这么问:
    int i = 2.9;
    结果i为什么是2,而不是3?
收到的鲜花
  • pangding2011-03-25 14:28 送鲜花  10朵   附言:我很赞同
  • 梦想天奇2011-04-17 14:54 送鲜花  2朵   附言:好文章
2011-03-25 08:23
剑池
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-3-25
收藏
得分:1 
我运行的结果是2,没错呀
2011-03-25 11:19
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:1 
3楼 说的比较犀利。

我也经常发现现在问问题的人不是很虚心。提的问题往往也不在点上。明明只有一点不会的地方,非用一大堆障眼法虎住。
2011-03-25 14:27
lisanhu1
Rank: 2
等 级:论坛游民
帖 子:31
专家分:78
注 册:2010-6-24
收藏
得分:1 
double型在计算的时候很容易出现微小的误差的,所以一般不要把double型的计算结果进行强制类型转换
还有在C++中我尝试了下将int换成double没设置精度的情况下是会输出3的我也没弄太明白,呵呵,可能是输出的时候进行了优化吧
2011-03-25 14:54
lisanhu1
Rank: 2
等 级:论坛游民
帖 子:31
专家分:78
注 册:2010-6-24
收藏
得分:0 
回复 5楼 pangding
我不赞同你的说法,这是个小问题,可是你能讲下为什么吗,如果不进行结果的精度限制用g++编译的结果也会出现3啊
这是对于C++中问题的研究,作为一个新人,提出这个问题也无可厚非,你觉得这个没用,说用障眼法,他的问题还不明确吗,两个double型运算正常输出结果也会是3的,可是换在这里却出了问题,那么这是否告诉我们尽量少用double型运算呢,在C中尽管是两个double型运算也会出现精度的问题,这不是个很好的问题吗,你现在对于C++学的很好了,难道就忘记了初学C++时的艰难吗,对于每个问题都能够坚持不懈地研究这是对于C++的热爱难道不值得提倡吗,你是否从新人的角度想过问题啊
收到的鲜花
2011-03-25 15:01
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
我说的障眼法是通病,不是针对楼主。
往往很多人一问问题就是一堆代码,然后让我们从中几十行甚至几百行中找出一行错误。
还有人明明知道可能是某些語句的问题,但非要再写些不太相关的话,让我们费解。有的人问的问题甚至就是在考验我们的眼力。
当然我承认,有经验的人调试語句的的速度会比一般的人快。但问问题的人也应该尽量为帮助他的人节约时间。


比如这个,我觉得再怎么新手也应该知道是 double 转 int 出的问题。为什么他不指出?
如果是我问同样的问题,至少会问成 3 楼那个样子。

这个问题不是我不知道,只是我觉得解释着比较麻烦,而且新手不一定能听懂。
如果楼主会浮点数的表示,和10进制到2进制的转化,这个问题应该会迎忍而解。
不过对于新人来说,我觉得某清楚这个问题没什么太大帮助。只要知道浮点数表示在精度上有誤差就够了。
要想解释就得用我提的那两个知识。大部分事情都是这样:原理很简单,但具体问题比较麻烦(不是难)。比如解 N 元线性方程组,上过中学的人都会解,但你肯定不愿意解超过三元的某个方程

答这个问题要花好多时间,等我晚上有空答答吧。
我答问题一般比较有耐心,而且都会很细致,熟悉我的人大约多少会有一点了解。只是看了2楼的帖子比较有同感而已。


请楼主和其他人不要誤解,我并不是针对某一个说的楼上那些话。

收到的鲜花
2011-03-25 18:09
gukai1991
Rank: 2
等 级:论坛游民
帖 子:19
专家分:51
注 册:2011-2-19
收藏
得分:0 
回复 3楼 rjsp
sorry,这个是课本上的题目,我只是照抄,而且。。。您解释一下也不是很复杂吧
2011-03-25 18:40
gukai1991
Rank: 2
等 级:论坛游民
帖 子:19
专家分:51
注 册:2011-2-19
收藏
得分:0 
回复 7楼 lisanhu1
感谢,太简单的问题,我都会自己想的,不会那么无聊为了发帖而发帖
但就是这个不明白,究竟是怎样产生的误差
感谢这位朋友
2011-03-25 18:44
快速回复:简单的问题,但自己不会
数据加载中...
 
   



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

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