문제
배열이 있고 사전 설정 페이지 크기에 따라 페이지로 나누고 싶습니다.
이것이 내가하는 방법입니다.
private int CalcPagesCount()
{
int totalPage = imagesFound.Length / PageSize;
// add the last page, ugly
if (imagesFound.Length % PageSize != 0) totalPage++;
return totalPage;
}
나는 계산이 가장 단순하지 않다고 생각합니다 (수학이 나쁘다). 하나 더 간단한 계산 공식을 줄 수 있습니까?
해결책
강제로 반올림하십시오 :
totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
또는 부동 소수점 수학 사용 :
totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);
다른 팁
실제로, 당신은 당신이 할 수있는 최선에 가깝습니다. 내가 생각할 수있는 유일한 것은 "더 나은"것은 다음과 같습니다.
totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
그리고 이것이 더 나은 유일한 이유는 IF 문을 피하기 때문입니다.
참고 : 페이지 크기가> 1 인 경우 항상 0 카운트에 대해서도 항상 1 페이지 이상을 얻습니다. 이것이 제가 필요한 것이지만 필요한 것이 아닐 수도 있습니다. 페이지 크기는 1 (어리이지만 기술적으로 유효 함)과 0의 카운트는 0 페이지입니다. 귀하의 요구에 따라 카운트 및 페이지 크기 1에 대한 0 값을 확인할 수 있습니다.
int pages = ((count - 1) / PAGESIZE) + 1;
OP에는 유효한 답변이 포함되어 있습니다. 내가 원한다면 끄다 그런 다음 페이징을 설정할 수있었습니다 PageSize = int.MaxValue
.
여기에 몇 가지 답변이 추가됩니다 PageSize
(imagesFound.Length + PageSize
) 그리고 그것은 오버플로를 일으킬 것입니다. 그런 다음 잘못된 결과로 이어집니다.
이것은 내가 사용할 코드입니다.
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;
페이지 번호가있는 오류가없는 것을 피하려면 NoofPages 계산을 생각할 수있는 가장 좋은 방법은 다음 줄을 수행하는 것입니다.
totalPage = Math.Ceiling(imagesFound.Length / PageSize);
Pagesize == imagesfound.length 인 경우 2 페이지를 제공해서는 안됩니다.