A fórmula mais simples para calcular a contagem de páginas?
-
05-07-2019 - |
Pergunta
Eu tenho uma matriz e quero dividi -los em página de acordo com o tamanho da página predefinida.
É assim que eu faço:
private int CalcPagesCount()
{
int totalPage = imagesFound.Length / PageSize;
// add the last page, ugly
if (imagesFound.Length % PageSize != 0) totalPage++;
return totalPage;
}
Eu sinto que o cálculo não é o mais simples (sou pobre em matemática), você pode fornecer uma fórmula de cálculo mais simples?
Solução
Forçar -o a arredondar:
totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
Ou use matemática de ponto flutuante:
totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);
Outras dicas
Na verdade, você está próximo do melhor que pode fazer. Sobre a única coisa que consigo pensar que pode ser "melhor" é algo assim:
totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
E a única razão pela qual isso é melhor é que você evita a instrução IF.
Nota: você sempre receberá pelo menos 1 página, mesmo para 0 contagem, se o tamanho da página for> 1, que é o que eu precisava, mas pode não ser o que você precisa. Um tamanho de página de 1 (bobo, mas tecnicamente válido) e uma contagem de 0 seriam zero páginas. Dependendo das suas necessidades, você pode verificar um valor zero para contagem e tamanho da página de 1
int pages = ((count - 1) / PAGESIZE) + 1;
O OP contém uma resposta válida. Se eu quisesse desligar Paging então eu poderia definir PageSize = int.MaxValue
.
Várias respostas aqui adicionam a PageSize
(imagesFound.Length + PageSize
) e isso causaria um transbordamento. O que leva a um resultado incorreto.
Este é o código que vou usar:
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;
Para evitar ter erros com a página numerando a melhor maneira de pensar em calcular ninguém é fazendo a seguinte linha
totalPage = Math.Ceiling(imagesFound.Length / PageSize);
Isso não deve lhe dar a página 2 quando Pagesize == Imagesfound.length