如何整数除法的结果?
当我使用诸如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