web-dev-qa-db-ja.com

ページ数を計算する最も簡単な式は?

配列があり、事前に設定されたページサイズに従ってページに分割したい。

これは私がする方法です:

private int CalcPagesCount()
{
    int  totalPage = imagesFound.Length / PageSize;

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

私は計算が最も単純ではないと感じています(私は数学が苦手です)、より簡単な計算式を1つ与えることができますか?

64
Benny

強制的に切り上げる:

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

または、浮動小数点演算を使用します。

totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);
151
John Kugelman

実際、あなたはできる限りの最高に近づいています。私が考えることができる唯一のことは、「より良い」かもしれないということです。

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

そして、これがより良い唯一の理由は、ifステートメントを避けることです。

20
Tom

注:ページサイズが> 1の場合、0カウントであっても、少なくとも1ページは常に取得されます。ページサイズ1(愚かではあるが技術的に有効)およびカウント0は、ゼロページになります。必要に応じて、カウントとページサイズが1のゼロ値を確認することもできます。

int pages = ((count - 1) / PAGESIZE) + 1;
17
Booji Boy

OPには有効な回答が含まれています。 オフにするページングが必要な場合は、PageSize = int.MaxValue

ここでいくつかの答えがPageSizeimagesFound.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;
9
Jeremy