문제

배열이 있고 사전 설정 페이지 크기에 따라 페이지로 나누고 싶습니다.

이것이 내가하는 방법입니다.

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 페이지를 제공해서는 안됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top