| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3864 人关注过本帖
标题:请教!定义int类型和doubleo类型后计算公式方面要注意什么?
只看楼主 加入收藏
阿迪
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-3-19
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:11 
请教!定义int类型和doubleo类型后计算公式方面要注意什么?
#include <stdio.h>

int main(int argc, char* argv[])
{
   int fahr,lower,upper;
   double celsius;
   printf("Enter lower:");
   scanf("%d",&lower);
   printf("Enter upper:");
   scanf("%d",&upper);
   printf("fahr celsius\n");

   for(fahr=lower;fahr<=upper;fahr++)
{
   celsius=(5.0/9.0)*(fahr-32);
   printf("%d%6.1f\n",fahr,celsius);
}
return 0;
}

代码中加红处:如果计算公式改成celsius=5*(fahr-32)/9;输出结果会不一样,为什么?
还有定义成double类型后,计算公式方面要注意什么?
感谢~~~~
搜索更多相关主题的帖子: include double 计算 return Enter 
2012-05-06 18:58
阿迪
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-3-19
收藏
得分:0 
我说的计算公式是指加减乘除方面;因为在我理解这两个公式的计算结果应该会一样,但是换了后输了结果却不一样。
2012-05-06 19:00
a7882669
Rank: 4
等 级:业余侠客
帖 子:192
专家分:290
注 册:2012-4-17
收藏
得分:2 
这应该是  double  和 int 的 问题   两个 类型不同    5.0和9.0  是浮点型,5和9是整型,  5.0和9或 5和9.0   会自动转换   
2012-05-06 22:54
S_Ringo
Rank: 4
来 自:歌舞伎町
等 级:业余侠客
帖 子:94
专家分:230
注 册:2012-4-15
收藏
得分:2 
在加减乘除中,如果两个操作数的类型相同,那么结果也是该操作数的类型
比如,5/9,因为两个操作数都是int型,因此结果会自动去掉小数部分,变成int型
如果两个操作数类型不一样,那么结果和占内存大的那个操作数类型相同
比如,5.0/9,5.0是double型,9是int型,那么结果就是double型
可能我说的不是很严谨,但是大概就是这个意思,不光是c,其他很多语言也一样是这个规则,比如Python……
2012-05-07 00:23
阿迪
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-3-19
收藏
得分:0 
非常谢谢上面两位的回答,不过好像都不是我要问的答案,我是想知道这两个公式在同一个定义类型的环境下更换后,所输出的结果为什么会不一样,比如就上面的代码中就只更换这两个公式,在我输入同一个数值后,输出结果是不一样的,这点让我搞不明白
2012-05-07 22:05
Dick_G
Rank: 2
等 级:论坛游民
帖 子:21
专家分:84
注 册:2012-4-7
收藏
得分:2 
celsius=(5.0/9.0)*(fahr-32);根据运算符的优先级,先计算5.0/9.0得到的是一个双精度的数然后乘以一个整数后得到一个双精度的数。
celsius=5*(fahr-32)/9先计算括号里的数得到一个整数,然后乘以5得到一个整数,最后除以一个整数,得到的结过时一个整数,
2012-05-07 22:39
星海浮沉
Rank: 2
等 级:论坛游民
帖 子:20
专家分:28
注 册:2012-5-3
收藏
得分:2 
在c中,除法运算时如果被除数和除数同时为整数时,结果也是整数(一般向零取整)!例子:7/2,结果是3!而如果其中有一个为浮点型,则结果为3.5!你的问题就是如此:
celsius=(5.0/9.0)*(fahr-32);这个结果是浮点型!
celsius=5*(fahr-32)/9;这个的结果是上一个结果向零取整!
 
2012-05-07 22:59
S_Ringo
Rank: 4
来 自:歌舞伎町
等 级:业余侠客
帖 子:94
专家分:230
注 册:2012-4-15
收藏
得分:2 
回复 5楼 阿迪
你第二个计算公式,最后实际是int型除以int型,那么结果自然隐式地把小数部分抹掉了……
即使你把celsius定义为double型,那么输出的也只是抹去了小数部分的结果的double形式……

[ 本帖最后由 S_Ringo 于 2012-5-7 23:04 编辑 ]
2012-05-07 23:03
wangxiaohu
Rank: 2
等 级:论坛游民
帖 子:19
专家分:29
注 册:2012-4-4
收藏
得分:0 
小问题,大含义

细节!细节!细节!
2012-05-07 23:42
阿迪
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-3-19
收藏
得分:0 
哈哈,非常谢谢几个朋友的耐心解释~~~
我终于明白了,实际上我只要把另外一个公式的其中一个数字写成浮点型就可以,我试了,改了后输出的结果就一样了。
真的非常谢谢几位~~~
2012-05-08 21:52
快速回复:请教!定义int类型和doubleo类型后计算公式方面要注意什么?
数据加载中...
 
   



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

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