2009-10-23 15 views
51

Mam tablicę i chcę je podzielić na stronę zgodnie z ustawionym rozmiarem strony.Najprostsza formuła obliczania liczby stron?

To jak to zrobić:

private int CalcPagesCount() { 

     int totalPage = imagesFound.Length/PageSize; 

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

     return totalPage; 
    } 

czuję wyliczenie nie jest najprostszą (jestem słaba z matematyki), można podać jedną prostszą formułę obliczeniową?

Odpowiedz

125

zmusić go do zaokrąglić w górę:

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

Albo użyć zmiennoprzecinkowych matematyki:

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

Niebezpieczeństwo ... powoduje przepełnienie gdy 'PageSize = int.MaxValue'. Dodałem odpowiedź, która nie jest podatna na przepełnienie. – Jeremy

19

Faktycznie, jesteś blisko najlepszych można zrobić. Jedyną rzeczą, że mogę myśleć, że może być „lepszy” jest mniej więcej tak:

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

A jedynym powodem, że jest lepiej, że można uniknąć if.

+0

Niebezpieczeństwo ... powoduje przepełnienie, gdy 'PageSize = int.MaxValue'. Dodałem odpowiedź, która nie jest podatna na przepełnienie. – Jeremy

-1

Aby uniknąć błędów ze strony numeracji najlepszy sposób mogę myśleć obliczania noOfPages jest wykonując następującą linię

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

To nie powinno dać strona 2 kiedy PageSize == imagesFound.Length

+1

Nie sądzę, że to jest ważne. Jeśli masz długość 3 i rozmiar strony 2, możesz oczekiwać 2 stron (pierwsza strona zawiera 2 elementy, druga strona ma 1). W ten sposób otrzymasz (3-1)/2 = 1 stronę. – joshhendo

+0

Zmieniono pierwotny wpis, aby się do tego przyzwyczaić, dzięki za uwagę –

12
//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

Wydaje się to znacznie prostsze niż zaakceptowana odpowiedź. –

+0

Tak, prostsze. Prostsze, ale Złe. , jeśli count = 0, wtedy strony = 1 –

+0

@Pevel Melnikov. Przypuszczam, że w czysto pedantycznym sensie jest to złe, ale zależy od kontekstu. W kodzie, w którym używałem tego, zawsze chciałem mieć co najmniej 1 stronę (0 stron było nieważne, nawet jeśli było 0 elementów). Powinienem przynajmniej dodać notatkę. –

3

OP zawiera poprawną odpowiedź. Jeśli chcę, aby wyłączyć stronicowanie, mógłbym ustawić PageSize = int.MaxValue.

Kilka odpowiedzi tutaj dodaje się do PageSize (imagesFound.Length + PageSize), co może spowodować przepełnienie. Co prowadzi do nieprawidłowego wyniku.

Jest to kod mam zamiar użyć:

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; 
Powiązane problemy