2009-10-23 32 views
51

Tôi có một mảng và tôi muốn chia chúng thành trang theo kích thước trang được đặt trước.Công thức đơn giản nhất để tính số trang?

Đây là cách tôi làm:

private int CalcPagesCount() { 

     int totalPage = imagesFound.Length/PageSize; 

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

     return totalPage; 
    } 

tôi cảm thấy việc tính toán không phải là đơn giản nhất (tôi bị khốn cùng trong toán học), bạn có thể cung cấp cho một công thức tính toán đơn giản hơn?

Trả lời

125

Force nó để làm tròn lên:

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

Hoặc sử dụng toán dấu phẩy động:

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

Danger ... kết quả này trong một tràn khi 'PageSize = int.MaxValue'. Tôi đã thêm một câu trả lời không dễ bị tràn. – Jeremy

19

Trên thực tế, bạn là gần nhất bạn có thể làm. Về điều duy nhất mà tôi có thể nghĩ về điều đó có thể là "tốt hơn" là một cái gì đó như thế này:

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

Và lý do duy nhất là tốt hơn là bạn tránh câu lệnh if.

+0

Nguy hiểm ... kết quả này bị tràn khi 'PageSize = int.MaxValue'. Tôi đã thêm một câu trả lời không dễ bị tràn. – Jeremy

-1

Để tránh lỗi với trang đánh số cách tốt nhất tôi có thể nghĩ đến việc tính toán noOfPages là bằng cách làm dòng sau

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

này không nên cung cấp cho bạn trang 2 khi PageSize == imagesFound.Length

+1

Tôi không nghĩ rằng điều này là hợp lệ. Nếu bạn có độ dài 3 và số trang là 2, bạn sẽ mong đợi 2 trang (trang đầu tiên có 2 mục, trang thứ hai có 1). Làm như vậy sẽ cho bạn (3-1)/2 = 1 trang. – joshhendo

+0

Đã thay đổi bài đăng gốc để thích ứng với điều đó, cảm ơn vì đã chú ý –

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

Điều này có vẻ đơn giản hơn nhiều so với câu trả lời được chấp nhận. –

+0

Có, đơn giản hơn. Đơn giản nhưng sai. nếu đếm = 0 thì trang = 1 –

+0

@Pevel Melnikov. Tôi cho rằng trong một nghĩa hoàn toàn theo nghĩa đen là sai, nhưng nó phụ thuộc vào ngữ cảnh. Trong đoạn code tôi sử dụng điều này trong tôi luôn luôn muốn có ít nhất 1 trang (0 trang không hợp lệ ngay cả khi có 0 bài). Tôi nên ít nhất thêm một ghi chú. –

3

OP có chứa câu trả lời hợp lệ. Nếu tôi muốn tắt phân trang thì tôi có thể đặt PageSize = int.MaxValue.

Một số câu trả lời ở đây thêm vào PageSize (imagesFound.Length + PageSize) và điều đó sẽ gây tràn. Mà sau đó dẫn đến một kết quả không chính xác.

Đây là mã tôi sẽ sử dụng:

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; 
Các vấn đề liên quan