如何整数除法的结果?

当我使用诸如C#或Java之类的语言时,我特别想到如何显示分页控件。

如果我有x个项目,我想以每个页面y的大块显示,那么需要多少页面?


找到一个优雅的解决方

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

来源:数字转换,Roland Backhouse,2001


转换为浮点和后退看起来像是在CPU级别上浪费大量时间。

伊恩尼尔森的解决方案:

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

可以简化为:

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

AFAICS,它没有Brandon DuRette指出的溢出漏洞,并且因为它只使用了一次,所以如果它来自一个昂贵的函数以从配置文件获取值,则不需要专门存储recordsPerPage,或者一些东西。

即这可能是低效的,如果config.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;

这应该给你你想要的。 你一定会希望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);
链接地址: http://www.djcxy.com/p/85793.html

上一篇: How to round up the result of integer division?

下一篇: mcpu at runtime vs. buildin