web-dev-qa-db-fra.com

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

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

Voici comment 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?

64
Benny

Forcer à arrondir:

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

Ou utilisez des mathématiques en virgule flottante:

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

En fait, vous êtes proche du meilleur que vous pouvez faire. La seule chose à laquelle je peux penser qui pourrait être "mieux" est quelque chose comme ceci:

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

Et la seule raison pour laquelle cela est encore meilleur est que vous évitez l'instruction if.

20
Tom

REMARQUE: vous obtiendrez toujours au moins 1 page, même pour un nombre de 0, si la taille de la page est> 1, ce dont j'avais besoin mais peut ne pas être ce dont vous avez besoin. Une taille de page de 1 (idiot mais techniquement valide) et un compte de 0 correspondraient à zéro page. Selon vos besoins, vous voudrez peut-être vérifier une valeur nulle pour le nombre et la taille de page de 1

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

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

Plusieurs réponses ici s'ajoutent à PageSize (imagesFound.Length + PageSize) et cela provoquerait 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;
9
Jeremy