count=(int)(((double)sumtime/sum)+0.5)和count=(sumtime%sum)?(

问题描述:

count=(int)(((double)sumtime/sum)+0.5)和count=(sumtime%sum)?(sumtime/sum+1):(sumtime/sum)有什么区别
要四舍五入,用第二个方法报错;sumtime和sum,count为int型;
能不能举个例子?
主要是问这2中写法的区别
1个回答 分类:综合 2014-11-30

问题解答:

我来补答
count=(int)(((double)sumtime/sum)+0.5); //这个是四舍五入法
count=(sumtime%sum)?(sumtime/sum+1):(sumtime/sum)//这个是进1取整法
分析如下:
count=(int)(((double)sumtime/sum)+0.5);
(double)sumtime加(double)是将int型转为double型,这是因为两个int型相除会舍弃小数位(如:1/2=0),转为double形后就会保留小数位.(int)的将用是将最后的结果转为int型,也就是要把小数位
去掉.举例如下:
假如; sumtime = 3 sum= 5; 按数学上的话,3/5=0.6,四舍五入后就是1,但在程序上,单纯的3/5却是等于0,因此要转型.
(double)sumtime/sum = 0.6 > 0.5; 四舍五入后应该为1,
所以((double)sumtime/sum)+0.5,加0.5后就等于1.1了,这时再用
(int)(((double)sumtime/sum)+0.5),就要以将小数位去掉,最后为1.
再举例:如果sumtime=1,sum=4;
(double)sumtime/sum = 0.25 < 0.5; 四舍五入后应该为0
((double)sumtime/sum)+0.5,加0.5后就等于0.75依然不会超过1
所以(int)(((double)sumtime/sum)+0.5),将小数位去掉后,最后为0.
count=(sumtime%sum)?(sumtime/sum+1):(sumtime/sum)//这个是进1取整法
直接举例说明:
假如; sumtime = 3 sum= 5; 原本数学上的结果为0.6
(sumtime%sum)=3//这里是求余
所以条件为真,执行(sumtime/sum+1) 这时sumtime/sum = 0(注意这里,这里没有转型,所以小数位会自动丢掉),所以 (sumtime/sum+1)结果为1
同样:假如;sumtime = 5 sum= 4; 原本数学上的结果为1.25
(sumtime%sum)=1//这里是求余
所以条件为真,执行(sumtime/sum+1) 这时sumtime/sum = 1(注意这里,这里没有转型,所以小数位会自动丢掉),所以 (sumtime/sum+1)结果为2
可以看出它的作用就是进1取整
打了这么多,希望对你有用吧
 
 
展开全文阅读
剩余:2000
上一页:hfftbjhg