Самая простая формула для подсчета количества страниц?
-
05-07-2019 - |
Вопрос
У меня есть массив, и я хочу разделить его на страницу в соответствии с заданным размером страницы.
Вот как я это делаю:
private int CalcPagesCount()
{
int totalPage = imagesFound.Length / PageSize;
// add the last page, ugly
if (imagesFound.Length % PageSize != 0) totalPage++;
return totalPage;
}
Мне кажется, что вычисления не самые простые (у меня плохая математика), можете ли вы дать более простую формулу расчета?
Решение
Заставьте его округлить:
totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
Или используйте математические вычисления с плавающей запятой:
totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);
Другие советы
На самом деле, вы близки к тому, что можете сделать лучше всего. О единственной вещи, о которой я могу подумать, может быть "лучше" это что-то вроде этого:
totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
И единственная причина, по которой это лучше, состоит в том, что вы избегаете оператора if.
ПРИМЕЧАНИЕ. Вы всегда получите по крайней мере 1 страницу, даже при 0, если размер страницы > 1, это то, что мне нужно, но может не быть то, что вам нужно. Размер страницы 1 (глупый, но технически действительный) и число 0 будет равно нулю страниц. В зависимости от ваших потребностей вы можете проверить наличие нулевого значения для счетчика & amp; размер страницы 1
int pages = ((count - 1) / PAGESIZE) + 1;
ОП содержит правильный ответ. Если бы я хотел отключить пейджинг, то я мог бы установить 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;
Чтобы избежать ошибок при нумерации страниц, лучше всего рассчитать noOfPages, выполнив следующую строку
totalPage = Math.Ceiling(imagesFound.Length / PageSize);
Это не должно давать вам страницу 2, когда PageSize == imagesFound.Length