1.提出问题
有n条记录,显示的时候分成x页,每页p条记录,一共有多少条记录。其中n,x,p都是整型。
在程序里我是这样写的:
int x=(int)Math.ceil(n/p);
如果n=14, p=5, 那么x=?
程序里的结果是x=2
这显然是错误的!
2.深入问题
为什么会出错这样的问题?其实很简单。
我们说向上取整,那么被向上取整的数应该是浮点数,不应该是整数,因为是整数的话就不存在什么取整的问题了。Math.ceil(double x)这个函数同样要求其参数是浮点数。
回来看看我的程序里的写法Math.ceil(n/p),n/p得出来的是一个整数,而不是浮点数,这是计算机里的转型问题。n,p都是整型,那么相除的结果也是整型,计算机就是这么弄的!
所以x=(int)Math.ceil(14/5)的结果就是2
3.解决问题
解决问题的话,不难了,我们要n,p相除的结果是浮点数就可以了!
int x=(int)Math.ceil((double)n/(double)p);