使用Java的数学函数为视图分页生成页码时出现问题

使用Java的数学函数为视图分页生成页码时出现问题,java,math,pagination,Java,Math,Pagination,如果我有2条数据库记录和每页25条记录,则以下代码: System.out.println("page count: " + (double)2/25); 此输出中的结果: page count: 0.08 但是因为我使用这个数字进行分页,所以我需要下一个最高的整数,在本例中是:1 Math.ceil和Math.abs都生成结果0或0.0 如何得到一个页码整数?一旦得到0.08,加上0.5,然后进行数学运算。floor。你可以在结果中加1,然后对int进行转换 (int) (1 + (dou

如果我有2条数据库记录和每页25条记录,则以下代码:

System.out.println("page count: " + (double)2/25);
此输出中的结果:

page count: 0.08
但是因为我使用这个数字进行分页,所以我需要下一个最高的整数,在本例中是:1

Math.ceil和Math.abs都生成结果0或0.0


如何得到一个页码整数?

一旦得到0.08,加上0.5,然后进行数学运算。floor。

你可以在结果中加1,然后对int进行转换

(int) (1 + (double)2/25)
这将转到下一个更高的数字,然后截断

但是,正确的公式是:

(int) (0.5 + (double) 2/25)
0.5 + 25/25 
因此,如果你有25个,那么它将是:

(int) (0.5 + (double) 2/25)
0.5 + 25/25 


您可以通过添加.5并取整数进行取整。

正确的方法是:

int pages = (totalRecords+recordsPerPage-1)/recordPerPage;
在你的情况下:pages=2+25-1/25=26/25=1

Math.ceil永远不应该给你0:0.08。很明显,你没有发布的代码中有一个bug

System.out.println(Math.ceil((double)2/25));
在Java6U21中输出1.0,正如您所期望的那样

猜测一下,您的另一个代码缺少对其中一个参数进行双精度转换,并且int/int在Java中总是返回int


打印0.0。

听起来好像错误在代码中,您没有显示给我们。为什么这么说?我上面写的有什么问题吗?你能解释一下你的意思吗?@Linc:你总是在使用地板之前加0.5。或者,您可以使用Math.round,其工作原理如下:intMath.floora+0.5fI正在执行:Math.ceil2/25@Linc:您需要先将2或25转换为双精度,或者在执行Math.ceil之前获得int 0。我已经编辑了我的答案来说明这一点。@Linc Math.ceildouble2/25。我相信这会对你有用。+1:我可以说我已经习惯了处理PHP之类的事情。。。我考虑过int/int等于int,以解释为什么Math.ceil不能正常工作,但不是为了在不使用ceil/floor的情况下生成正确的结果。这是错误的,想象一下如果有25条记录,pageSize=25。公式给出了2页,尽管只有1页。