Die einfachste Formel zur Berechnung der Seitenzahl?

79

Ich habe ein Array und möchte sie entsprechend der voreingestellten Seitengröße in Seiten unterteilen.

So mache ich:

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

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

Ich denke, die Berechnung ist nicht die einfachste (ich bin schlecht in Mathe). Können Sie eine einfachere Berechnungsformel geben?

Benny
quelle

Antworten:

183

Zum Aufrunden zwingen:

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

Oder verwenden Sie Gleitkomma-Mathematik:

totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);
John Kugelman
quelle
2
Gefahr ... dies führt zu einem Überlauf, wenn PageSize = int.MaxValue. Ich habe eine Antwort hinzugefügt, die nicht für einen Überlauf anfällig ist.
Jeremy
5
Um den Überlauf zu vermeiden, können Sie einfach die Formel umgestalten, um zu erhalten:((imagesFound.Length - 1) / PageSize) + 1
AdrianRM
21

Tatsächlich sind Sie dem Besten nahe, was Sie tun können. Über das einzige, was ich mir vorstellen kann, dass es "besser" sein könnte, ist so etwas:

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

Und der einzige Grund, warum dies besser ist, ist, dass Sie die if-Anweisung vermeiden.

Tom
quelle
Gefahr ... dies führt zu einem Überlauf, wenn PageSize = int.MaxValue. Ich habe eine Antwort hinzugefügt, die nicht für einen Überlauf anfällig ist.
Jeremy
19

HINWEIS: Sie erhalten immer mindestens 1 Seite, auch bei einer Anzahl von 0, wenn die Seitengröße> 1 ist. Dies ist das, was ich brauchte, aber möglicherweise nicht das, was Sie brauchen. Eine Seitengröße von 1 (albern, aber technisch gültig) und eine Anzahl von 0 wären null Seiten. Abhängig von Ihren Anforderungen möchten Sie möglicherweise nach einem Nullwert für Anzahl und Seitengröße von 1 suchen

int pages = ((count - 1) / PAGESIZE) + 1;
Booji Boy
quelle
Ja, einfacher. Einfacher aber falsch. wenn count = 0, dann pages = 1
Pavel Melnikov
1
@Pevel Melnikov. Ich nehme an, rein pedantisch ist es falsch, aber es hängt vom Kontext ab. In dem Code, in dem ich dies verwendet habe, wollte ich immer mindestens 1 Seite (0 Seiten waren ungültig, selbst wenn es 0 Elemente gab). Ich sollte zumindest eine Notiz hinzufügen.
Booji Boy
1
@ PavelMelnikov, es ist nicht genau falsch. Kommt nur darauf an, wie du es sehen willst. Die Annahme, dass immer mindestens 1 Seite zurückgegeben wird, ist jedoch falsch. 0 Datensätze und eine Seitengröße von 1 führen zu 0. Lassen Sie also entweder keine Seitengröße von 0 zu oder führen Sie eine Überprüfung durch.
Michael
12

Das OP enthält eine gültige Antwort. Wenn ich das Paging ausschalten wollte, konnte ich einstellenPageSize = int.MaxValue .

Mehrere Antworten hier ergänzen PageSize( imagesFound.Length + PageSize) und das könnte einen Überlauf verursachen. Was dann zu einem falschen Ergebnis führt.

Dies ist der Code, den ich verwenden werde:

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;
Jeremy
quelle
1
  1. Sie können die Gesamtseite in SQL Server abrufen: -
DECLARE @PageCount INT;
DECLARE @NoOfData INT;
SET @NoOfData = (select Count(*) AS [PageCount] from YourTableName)
SET @PageCount=((@NoOfData+@PageSize-1)/@PageSize)
SELECT @PageCount AS [PageCount]
  1. Sie können in Ihren Code bekommen-
int totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);

vikas Chaturvedi
quelle
1

Folgendes hat bei mir funktioniert:

if(totalRecords%value === 0){
  count = (totalRecords) / value;
}
else {
  count = Math.floor((totalRecords + value - 1) / value);
}
QauseenMZ
quelle
0

Etwas, das ich selbst geschrieben habe:

private int GetPageCount(int count, int pageSize)
{
    int result = 0;

    if(count > 0)
    {
        result = count / pageSize;
        if(result > 0 && (count > (pageSize * result)))
        {
           result++;
        }
    }

    return result;
}

(Und sicher, nicht festgelegt pageSizezu int.MaxValue)

st_stefanov
quelle
0

Unten finden Sie einen Arbeitscode zur Berechnung der Paginierung in der Liste:

              int i = 0;
              int pagecount = 0;
              int pageSize = 50;

Listenelemente = neue Liste (); Aufgaben: Elemente zur Liste hinzufügen:

              if (Items.Count() != 0)
              {
                    int pageNumber = Total Records / 50;

                          for (int num = 0; numi < pageNumber; num++)
                          {
                                var x = Items.Skip(i * pageSize).Take(pageSize);
                                i++;
                          }

                    var y = Items.Skip(i * pageSize).Take(pageSize);
              }
Jugendra Singh
quelle
-1

Um Fehler bei der Seitennummerierung zu vermeiden, kann ich mir noOfPages am besten anhand der folgenden Zeile vorstellen

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

Dies sollte Ihnen nicht Seite 2 geben, wenn PageSize == imagesFound.Length

Clayton C.
quelle
1
Ich denke nicht, dass dies gültig ist. Wenn Sie eine Länge von 3 und eine Seitengröße von 2 haben, würden Sie 2 Seiten erwarten (die erste Seite enthält 2 Elemente, die zweite Seite hat 1). Wenn Sie dies tun, erhalten Sie (3-1) / 2 = 1 Seite.
Joshhendo
Der ursprüngliche Beitrag wurde geändert, um auch dem Rechnung zu tragen. Vielen Dank, dass Sie es bemerkt haben
Clayton C,