2009-10-23 12 views
51

Ich habe ein Array und ich möchte sie in Seiten entsprechend der voreingestellten Seitengröße teilen. DieseDie einfachste Formel zum Berechnen der Seitenzahl?

ist, wie ich tun:

private int CalcPagesCount() { 

     int totalPage = imagesFound.Length/PageSize; 

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

     return totalPage; 
    } 

Ich fühle die Berechnung nicht die einfachste ist (ich arm bin in Mathe), können Sie eine einfachere Berechnungsformel geben?

Antwort

125

Kraft es abzurunden:

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

Oder Gleitkommamathematik verwenden:

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

Gefahr ... dies führt zu einem Überlauf, wenn 'Pagesize = int.MaxValue'. Ich fügte eine Antwort hinzu, die nicht anfällig für einen Überlauf ist. – Jeremy

19

Eigentlich sind Sie in der Nähe der besten Sie tun können. Über das einzige, was ich daran denken kann, könnte „besser“ sein ist so etwas wie dieses:

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

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

+0

Gefahr ... dies führt zu einem Überlauf, wenn 'PageSize = int.MaxValue'. Ich fügte eine Antwort hinzu, die nicht anfällig für einen Überlauf ist. – Jeremy

-1

zu vermeiden Um Fehler mit Seitennummerierung der beste Weg, die ich noOfPages ist die Berechnung, indem Sie die folgende Zeile

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

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

+1

Ich glaube nicht, dass das 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 hat 2 Einträge, die zweite Seite hat 1). Dadurch erhalten Sie (3-1)/2 = 1 Seite. – joshhendo

+0

Änderte den ursprünglichen Beitrag, um auch dafür zu passen, danke für das Bemerken –

12
denken kann
//note: you will always get at least 1 page, even for 0 count, which is what I needed but may not be what you need. 
int pages = ((count - 1)/PAGESIZE) + 1; 
+0

Dieses scheint viel einfacher als die angenommene Antwort. –

+0

Ja, einfacher. Einfacher aber falsch. wenn Anzahl = 0 dann Seiten = 1 –

+0

@Pevel Melnikov. Ich nehme an, dass es in einem rein pedantischen Sinne falsch ist, aber es hängt vom Kontext ab. In dem Code, in dem ich das verwendete, wollte ich immer mindestens eine Seite (0 Seiten waren ungültig, selbst wenn es 0 Elemente gab). Ich sollte wenigstens eine Notiz hinzufügen. –

3

Das OP enthält eine gültige Antwort. Wenn ich Paging schalten wollte, dann könnte ich PageSize = int.MaxValue setzen.

Mehrere Antworten hier hinzufügen zu PageSize (imagesFound.Length + PageSize) und das würde 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; 
Verwandte Themen