Каков наиболее элегантный способ (в C #) определить, сколько страниц данных вы указали:

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

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

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

Спасибо.

9
Scott 6 Июл 2009 в 23:42

4 ответа

Лучший ответ
int pages = ((totalRecords-1) / recordsPerPage)+1

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

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

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;
}
22
Welbog 6 Июл 2009 в 19:44
int totalPages = (int)Math.Ceiling((double)totalRecords/recordsPerPage);
-1
Jason 6 Июл 2009 в 19:50

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

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

Если totalRecords равно 1, делится на 0. Нужен дополнительный оператор if.

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

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
3 revs, 2 users 93% 24 Авг 2012 в 10:27
int pages = 1 + (totalRecords + 1) / (recordsPerPage + 1)
0
user132748user132748 6 Июл 2009 в 19:56