我特别考虑的是如何在使用c#或Java等语言时显示分页控件。

如果我有x个项目,我想在每页y块中显示,需要多少页?


当前回答

另一种替代方法是使用mod()函数(或'%')。如果有非零余数,则对除法的整数结果加1。

其他回答

一个泛型方法,你可以迭代它的结果:

public static Object[][] chunk(Object[] src, int chunkSize) {

    int overflow = src.length%chunkSize;
    int numChunks = (src.length/chunkSize) + (overflow>0?1:0);
    Object[][] dest = new Object[numChunks][];      
    for (int i=0; i<numChunks; i++) {
        dest[i] = new Object[ (i<numChunks-1 || overflow==0) ? chunkSize : overflow ];
        System.arraycopy(src, i*chunkSize, dest[i], 0, dest[i].length); 
    }
    return dest;
}

下面的方法应该比上面的解决方案做得更好,但以性能为代价(由于0.5* rct分母的浮点计算):

uint64_t integerDivide( const uint64_t& rctNumerator, const uint64_t& rctDenominator )
{
  // Ensure .5 upwards is rounded up (otherwise integer division just truncates - ie gives no remainder)
  return (rctDenominator == 0) ? 0 : (rctNumerator + (int)(0.5*rctDenominator)) / rctDenominator;
}

您需要执行浮点除法,然后使用ceiling函数将值四舍五入到下一个整数。

尼克·贝拉尔迪(Nick Berardi)回答的一个变种,避开了一个分支:

int q = records / recordsPerPage, r = records % recordsPerPage;
int pageCount = q - (-r >> (Integer.SIZE - 1));

备注:(-r >>(整数。SIZE - 1))由r的符号位组成,重复32次(感谢>>操作符的符号扩展)。如果r为0或负,它的值为0,如果r为正,它的值为-1。如果记录% recordsPerPage > 0,那么从q中减去它的效果是加1。

你可以使用

(int)Math.Ceiling(((decimal)model.RecordCount )/ ((decimal)4));