Pregunta

Tengo una matriz y quiero dividirlos en página según el tamaño de página preestablecido.

Así es como lo hago:

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

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

Siento que el cálculo no es el más simple (soy pobre en matemáticas), ¿puedes dar una fórmula de cálculo más simple?

¿Fue útil?

Solución

Oblígalo a redondear:

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

O usa matemáticas de punto flotante:

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

Otros consejos

En realidad, estás cerca de lo mejor que puedes hacer. Lo único que se me ocurre es que " mejor " es algo como esto:

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

Y la única razón por la que esto es mejor es que evita la instrucción if.

NOTA: siempre obtendrás al menos 1 página, incluso para el recuento de 0, si el tamaño de la página es > 1, que es lo que necesitaba pero puede que no sea lo que necesitas. Un tamaño de página de 1 (tonto pero técnicamente válido) y un conteo de 0 serían cero páginas. Dependiendo de sus necesidades, es posible que desee verificar un valor de cero para count & amp; tamaño de página de 1

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

El OP contiene una respuesta válida. Si quisiera desactivar la paginación, podría establecer PageSize = int.MaxValue .

Varias respuestas aquí se agregan a PageSize ( imagesFound.Length + PageSize ) y eso causaría un desbordamiento. Lo que luego conduce a un resultado incorrecto.

Este es el código que voy a utilizar:

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;

Para evitar tener errores con la numeración de páginas, la mejor manera de pensar en calcular noOfPages es haciendo la siguiente línea

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

Esto no debería darte la página 2 cuando PageSize == imagesFound.Length

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top