Как окружить результат целочисленного деления?

Я думаю, что при установке python он помещает инструкции экспорта в файл ~ / .bash_profile. Поэтому, если вы больше не собираетесь использовать Python 2, вы можете просто удалить эту инструкцию оттуда. Псевдоним, как указано выше, также является отличным способом сделать это.

Вот как удалить ссылку из ~ / .bash_profile - vim ./.bash_profile - удалить ссылку (AKA что-то вроде: export PATH = "/ Users / bla / anaconda: $ PATH") - сохранить и выйти - источник ./.bash_profile для сохранения изменений

316
задан Joris Schellekens 2 November 2017 в 12:29
поделиться

9 ответов

Найденный изящным решением:

int pageCount = (records + recordsPerPage - 1) / recordsPerPage;

Источник: Преобразование чисел, Roland Backhouse, 2001

454
ответ дан Ian Nelson 23 November 2019 в 01:04
поделиться

Вы захотите сделать деление с плавающей точкой, и затем использовать функцию потолка, окружить значение к следующему целому числу.

-4
ответ дан Kibbee 23 November 2019 в 01:04
поделиться

Другая альтернатива должна использовать модификацию () функция (или '%'). Если существует ненулевой остаток, тогда увеличивают целочисленный результат подразделения.

2
ответ дан Jarod Elliott 23 November 2019 в 01:04
поделиться

Для записей == 0, решение rjmunro дает 1. Правильное решение 0. Тем не менее, если Вы знаете, что записи> 0 (и я уверен, что мы все приняли, recordsPerPage> 0), затем rjmunro решение дает корректные результаты и не имеет ни одной из водосливных проблем.

int pageCount = 0;
if (records > 0)
{
    pageCount = (((records - 1) / recordsPerPage) + 1);
}
// no else required

Весь целочисленные математические решения будут более эффективными, чем любой из решений с плавающей точкой.

4
ответ дан Mike 23 November 2019 в 01:04
поделиться

Целочисленное математическое решение, что предоставленный Ian хорош, но страдает от ошибки целочисленного переполнения. Принятие переменных является всем int, решение могло быть переписано, чтобы использовать long математика и избежать ошибки:

int pageCount = (-1L + records + recordsPerPage) / recordsPerPage;

, Если records long, ошибка остается. Решение для модуля не имеет ошибки.

18
ответ дан Ajay2707 23 November 2019 в 01:04
поделиться

Это должно дать Вам, что Вы хотите. Вы определенно захотите x объекты, разделенные на y объекты на страницу, проблема состоит в том, когда неровные числа подходят, поэтому если существует частичная страница, мы также хотим добавить одну страницу.

int x = number_of_items;
int y = items_per_page;

// with out library
int pages = x/y + (x % y > 0 ? 1 : 0)

// with library
int pages = (int)Math.Ceiling((double)x / (double)y);
67
ответ дан Nick Berardi 23 November 2019 в 01:04
поделиться

Для C# решение состоит в том, чтобы бросить значения к двойному (как Математика. Потолок берет двойное):

int nPages = (int)Math.Ceiling((double)nItems / (double)nItemsPerPage);

В Java необходимо сделать то же с Math.ceil ().

71
ответ дан trampster 23 November 2019 в 01:04
поделиться

Преобразование в плавающую точку и назад походит на огромную пустую трату времени на уровне процессоров.

решение Ian Nelson:

int pageCount = (records + recordsPerPage - 1) / recordsPerPage;

Может быть упрощен до:

int pageCount = (records - 1) / recordsPerPage + 1;

AFAICS, это не имеет водосливной ошибки, на которую Brandon DuRette указал, и потому что это только использует его однажды, Вы не должны хранить recordsPerPage особенно, если это прибывает из дорогой функции для выборки значения из файла конфигурации или чего-то.

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

int pageCount = (records + config.fetch_value('records per page') - 1) / config.fetch_value('records per page');

Это создает переменную, в которой Вы действительно не нуждаетесь, который, вероятно, имеет (незначительные) последствия памяти и просто очень вводит:

int recordsPerPage = config.fetch_value('records per page')
int pageCount = (records + recordsPerPage - 1) / recordsPerPage;

Это - вся одна строка и только выбирает данные однажды:

int pageCount = (records - 1) / config.fetch_value('records per page') + 1;
185
ответ дан rjmunro 23 November 2019 в 01:04
поделиться

Альтернатива удалению ветвления при тестировании на ноль:

int pageCount = (records + recordsPerPage - 1) / recordsPerPage * (records != 0);

Не уверен, будет ли это работать в C #, следует делать в C / C ++.

0
ответ дан 23 November 2019 в 01:04
поделиться