2009-07-06 3 views
7

Что является самым изящным способом (в C#) определения, сколько страниц данных, которые вы дали:..Определить количество страниц с Total и PerPage значения

а) Всего записей б) записей на странице.

В настоящее время у меня работает, но он использует if/else для проверки, является ли это значение, чем общее (1 страница) или более, а затем необходимо усечь десятичное место, выполнить операцию mod и добавить еще 1 если имелось конечное десятичное число.

Я уверен, что есть функция Math, которая делает это для меня много и не так уродлива.

Спасибо.

ответ

20
int pages = ((totalRecords-1)/recordsPerPage)+1 

Предполагая totalRecords и recordsPerPage являются Интс. Если они удваиваются (почему они удваиваются?), Вам нужно сначала преобразовать их в ints или longs, потому что это зависит от целочисленного деления для работы.

Оберните его функцией, чтобы вам не приходилось повторять вычисления везде в базе кода. Просто установите его один раз в функции, как это:

public int countPages(int totalRecords, int recordsPerPage) { 
    return ((totalRecords-1)/recordsPerPage)+1; 
} 

Если totalRecords может быть равен нулю, вы можете просто добавить специальный случай для этого в функции легко:

public int countPages(int totalRecords, int recordsPerPage) { 
    if (totalRecords == 0) { return 1; } 
    return ((totalRecords-1)/recordsPerPage)+1; 
} 
+0

'if (totalRecords <= recordsPerPage) {return 1; } ' – Dementic

+1

Не нужно тестировать случай, когда' totalRecords == 0', потому что '-1', деленный на' recordsPerPage', округляется до '0', если' recordsPerPage' больше, чем '1', что обычно дело. – stun

-1
int totalPages = (int)Math.Ceiling((double)totalRecords/recordsPerPage); 
+1

Я могу себе представить, как компьютер решил, что 50/25 = 2.0000000000096 или какая-то такая глупость. – Brian

0
int pages = 1 + (totalRecords + 1)/(recordsPerPage + 1) 
+0

Это не работает, если оба тотальных рекордера и записейPerPage одинаковы. Он будет выводить 2 вместо правильного 1. Не следует добавлять его в числитель, просто знаменатель. – Welbog

0

Проблема с таким подходом:

public int countPages(int totalRecords, int recordsPerPage) { 
    if (totalRecords == 0) { return 1; } return ((totalRecords-1)/recordsPerPage)+1; 
} 

, если totalRecords - 1 результат, деление на 0. Требуется дополнительная инструкция if.

Вот моя переписывающая. .NET имеет тенденцию использовать -1, когда результат возврата невозможен. Поэтому повторно используйте это соглашение.

public int countPages(int totalRecords, int recordsPerPage) 
{ 

//insert as many paranthesies and tabs as makes you happy. 
if(totalRecords == 0) return -1; 
return (totalRecords % recordsPerPage) == 0? 
(totalRecords/recordsPerPage) 
: (totalRecords/recordsPerPage) + 1; 

} 
+0

Это не приводит к ошибке divide-by-0. Это было бы возможно только в том случае, если 'recordsPerPage' равнялся 0. – Dave