注册 登录
编程论坛 C++教室

C++里整数相除只能得到整数吗?

Sornets 发布于 2013-05-27 22:08, 15622 次点击
RT,比如
int a = 100,b = 101,c = 102;
double p;
p = (a + b + c)/2;

这个p为什么不是151.5呢?
13 回复
#2
我叫沃恩2013-05-27 22:44
int a = 100,b = 101,c = 102;
double p;
p = (a + b + c)/2.0;//改成这样试试!

新手发言,说错勿怪!!
#3
peach54602013-05-28 07:07
2L正确
#4
lzj125302013-05-28 08:49
就楼主例子而言,“/”是取商符号,如果上下两个数都是整数类型。那么他运算的结果默认就是int类型,因此只会取整数。如果要获得浮点数可以像2楼一样在表达式中加如浮点类型的数据。
就是p=(a+b+c)/2.0。这样结果就是浮点数。或者使用强制类型转换,例如P=(double)(a+b+c)/2;强制把结果转换为浮点数。 这两种方式可以使用
程序代码:

int a=100,b=101,c=102;
double p;
p=(a+b+c)/2.0;
//或者是 p=(double)(a+b+c)/2;



[ 本帖最后由 lzj12530 于 2013-5-28 08:59 编辑 ]
#5
邓士林2013-05-28 12:05
类型的隐式转换,系统会的
#6
pangding2013-05-28 12:41
整数除法就是整数结果,如果有浮点数才会出现浮点结果。

做这种规定是因为以前 cpu 处理整数和浮点数是不同模块的工作。如果指令里没有要求计算浮点的话,就不加载浮点指令了。现在的 PC 大多都在一起了。
#7
子楠2013-05-28 12:53
类型转换,
#8
Sornets2013-05-28 17:40
回复 2楼 我叫沃恩
对啊!
忘记这种方法了,我是从定义那里一个个改成double了。。
#9
Sornets2013-05-28 17:41
回复 4楼 lzj12530
p=(double)(a+b+c)/2;

这个能不能理解成跟2.0的原理一样,只是把分子改成浮点型,得到浮点型的结果?
#10
Sornets2013-05-28 17:41
回复 5楼 邓士林
恩 谢谢!
#11
Sornets2013-05-28 17:42
回复 6楼 pangding
恩 谢谢!虽然没看懂。
#12
Sornets2013-05-28 17:42
回复 7楼 子楠
谢谢!
#13
lzj125302013-05-28 19:24
回复 9楼 Sornets
你也可以这么理解,一个是强制类型转换,另一个就像他说的隐式
#14
c68961662013-05-28 20:41
学习
1