109 votes

La formule la plus simple pour calculer le nombre de pages ?

J'ai un tableau et je veux le diviser en page selon la taille de page prédéfinie.

C'est comme ça que je fais :

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

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

Je pense que le calcul n'est pas le plus simple (je suis pauvre en mathématiques), pouvez-vous donner une formule de calcul plus simple ?

235voto

John Kugelman Points 108754

Forcer à arrondir :

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

Ou utiliser le calcul en virgule flottante :

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

35voto

Booji Boy Points 3005

REMARQUE : vous obtiendrez toujours au moins une page, même pour un nombre de 0, si la taille de la page est > 1, ce qui est ce dont j'avais besoin mais qui peut ne pas être ce dont vous avez besoin. Une taille de page de 1(stupide mais techniquement valide) et un nombre de 0 serait zéro pages. En fonction de vos besoins, vous pouvez vérifier une valeur zéro pour le nombre et la taille de la page de 1

int pages = ((count - 1) / PAGESIZE) + 1;

24voto

Tom Points 415

En fait, vous êtes proche du mieux que vous pouvez faire. À propos de la seule chose que je peux penser que ce pourrait être « mieux » c'est quelque chose comme ça :

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

Et la seule raison pour laquelle c'est mieux c'est que vous évitez l'instruction if.

13voto

Jeremy Points 388

L'OP contient une réponse valide. Si je voulais désactiver la pagination, je pouvais définir PageSize = int.MaxValue.

Plusieurs réponses ici s'ajoutent à PageSize (imagesFound.Length + PageSize) et cela pourrait causer un débordement. Ce qui conduit alors à un résultat incorrect.

Voici le code que je vais utiliser :

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;

7voto

just_dev Points 41

Toujours utilisé cette formule :

int totalPages = items.Count / pageSize + (items.Count % pageSize > 0 ? 1 : 0);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X