方法一:检查余数
(个人建议采用这种方法,因为一般不会出错)
if(temp%k == 0)
result = temp/k;
else
result = (temp/k)+1;
方法二:数学思想
(推荐,但是可能溢出)
int result = (temp - 1)/k + 1;
//等价于
int result = (temp + k - 1)/k;
//第一句代码中的1换成(k/k)就得到第二句代码了
//可以自己带入数字检验一下
方法三:
(不推荐,可能会因为精度问题而出错)
//注意!!!
//ceil()函数返回的是double型,所以用强制转换
int result = (int) ceil(temp*1.0/k);
此方法精度丢失可能在极端条件下出现,但是一旦出现,我们很难排查出这个隐式bug。
举个例子:
假设某两个数的ceil计算结果原本是2.0,但由于精度问题,ceil结果其实是1.9999999999999999999999999
在结果转为int型数据时,发生了精度丢失,计算结果由2.0转换为1
总结:在任何可能与浮点数进行比较或者整形与浮点型之间进行类型转换的地方都必须特别注意!!