无论出于何种原因,我都无法弄清楚如何识别给定页面中的结果数量。我有一个数据列表和一个属性PageSize
,用于标识一个页面中应该包含多少结果。假设有120个结果,页面大小为25.这意味着应该总共有5个页面,前4个有25个记录,第5个只有20个记录。现在,我得到的结果是全面的,例如我可能会50
当它应该是20
。
我正在写这个函数来返回指定页面中的结果数,但我似乎无法得到简单的数学(我从未擅长数学)。每页没有实际的列表,我只需阅读Count
来识别该页面中的记录数量 - 我需要使用此函数动态计算它。
请参阅CALCULATION DONE HERE
下的代码行:
function TMyData.SizeOfPage(const Index: Integer): Integer;
begin
//Index = Page Number (0 ... MAX)
//Result = Number of results in given page
//PageCount = Total number of pages (from other function)
//RecordCount = Total number of records (all pages)
Result:= 0; //Default
//Validate index bounds
if (Index >= 0) and (Index < PageCount) then begin
if Index < PageCount-1 then begin
//Just return full size of one page
Result:= PageSize;
end else begin
//Return number of records in the last page
//--- CALCULATION DONE HERE ---
Result:= RecordCount - Trunc(RecordCount / PageSize);
end;
end else begin
raise Exception.Create('Page index out of bounds ('+IntToStr(Index)+')');
end;
end;
答案 0 :(得分:4)
我认为没有理由在这里使用浮点运算。如果整数运算足够,我总是避免浮点运算。
我会这样写:
ItemsOnLastPage := 1 + (RecordCount-1) mod PageSize;
或许这个版本:
ItemsOnLastPage := RecordCount - (PageCount-1)*PageSize;
这一点特别容易理解。您减去所有完整页面上显示的记录,剩下的是最后一页上的记录。
就PageCount
而言,您可以这样计算:
PageCount := (RecordCount+PageSize-1) div PageSize;
感谢@Rob的见解。