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?

Antworten:


183

Zum Aufrunden zwingen:

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

Oder verwenden Sie Gleitkomma-Mathematik:

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

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.


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;

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;

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);


1

Folgendes hat bei mir funktioniert:

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

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)


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);
              }

-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


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,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.