Java 如何取整整数除法的结果?

问题描述

Ian提供的整数数学解决方案很好,但存在整数溢出错误。假设变量为all int,则解决方案可以重写为使用long数学运算并避免错误

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

如果recordslong,则错误仍然存​​在。模数解决方案没有错误

对于C#,解决方案是将值转换为双精度值(因为Math.Ceiling需要双精度值):

int nPages = (int)Math.Ceiling((double)nItems / (double)nItemsP

在Java中,你应该对Math.ceil()执行相同的操作。

cpu级别,转换为浮点数和返回浮点数似乎是对时间的巨大浪费。

伊恩·尼尔森(Ian Nelson)的解决方案:

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;

一个优雅的解决方案:

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

解决方法

我在考虑使用C#或Java之类的语言时如何显示分页控件。

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

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”