Самая простая формула для подсчета количества страниц? - PullRequest
64 голосов
/ 23 октября 2009

У меня есть массив, и я хочу разделить его на страницу в соответствии с заданным размером страницы.

Вот как я это делаю:

private int CalcPagesCount()
{
    int  totalPage = imagesFound.Length / PageSize;

    // add the last page, ugly
    if (imagesFound.Length % PageSize != 0) totalPage++;
    return totalPage;
}

Мне кажется, что вычисления не самые простые (у меня плохая математика), можете ли вы дать одну более простую формулу расчета?

Ответы [ 5 ]

150 голосов
/ 23 октября 2009

Заставить его округлить:

totalPage = (imagesFound.Length + PageSize - 1) / PageSize;

Или используйте математику с плавающей точкой:

totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);
20 голосов
/ 23 октября 2009

На самом деле, вы близки к лучшим, что вы можете сделать. Единственное, о чем я могу думать, что это может быть «лучше», это что-то вроде этого:

totalPage = (imagesFound.Length + PageSize - 1) / PageSize;

И единственная причина, по которой это лучше, состоит в том, что вы избегаете оператора if.

17 голосов
/ 05 декабря 2014

ПРИМЕЧАНИЕ: вы всегда получите по крайней мере 1 страницу, даже для счетчика 0, если размер страницы> 1, это то, что мне нужно, но может быть не то, что вам нужно Размер страницы 1 (глупый, но технически действительный) и число 0 будет равно нулю страниц. В зависимости от ваших потребностей вы можете проверить нулевое значение для количества и размера страницы 1

int pages = ((count - 1) / PAGESIZE) + 1;
9 голосов
/ 11 ноября 2017

ОП содержит правильный ответ. Если бы я хотел отключить пейджинг, я мог бы установить PageSize = int.MaxValue.

Несколько ответов здесь добавляют к PageSize (imagesFound.Length + PageSize), и это может вызвать переполнение. Что приводит к неверному результату.

Это код, который я собираюсь использовать:

int imageCount = imagesFound.Length;

// include this if when you always want at least 1 page 
if (imageCount == 0)
{
    return 1;
}

return imageCount % PageSize != 0 
    ? imageCount / PageSize + 1 
    : imageCount / PageSize;
0 голосов
/ 28 мая 2014

Чтобы избежать ошибок при нумерации страниц, лучше всего рассчитать noOfPages, выполнив следующую строку

totalPage = Math.Ceiling(imagesFound.Length / PageSize);

Это не должно давать вам страницу 2, когда PageSize == imagesFound.Length

...