0

我正在为我的网格视图开发自定义寻呼机控件。

我正在使用以下语法来获取页面数量:

dblpagecount = (doble)(totrecords / grdPages.PageSize);
pagecount = (int)Math.Ceiling(dblPagecount);

使用上面的语法,如果记录数是 41,页面大小是 5,那么我得到的 pagecount 是 8,应该是 9。

如果我使用以下语法,

double dblPagecount = (double)((decimal)totrecords /grdPages.PageSize);
pagecount = (int)Math.Ceiling(dblPagecount);

我得到准确的页数,即 9

我得到了想要的结果,但无法理解为什么上面的语法没有给出想要的结果。

当我在第一种情况下进行调试时,我观察到 dblpagecount 得到的结果是 8.0 insted of 8.2

任何人都可以澄清一下,上述陈述是如何工作的?

4

2 回答 2

1

我假设两者totrecordsgrdPages.PageSize都是 type int。因此,无论的类型如何dblpagecount,您最终都会以整数算术执行除法,它会截断为 0。但是,我实际上不会使用您的第二段代码(当然也不会同时double 使用 decimal-混合这些几乎总是一个坏主意)。相反,我只是使用:

// Names changes slightly for readability
int pageCount = (totalRecords + grdPages.PageSize - 1) / grdPages.PageSize;

这将有效地“四舍五入”,而无需任何浮点运算。

于 2013-09-26T08:16:17.977 回答
0

简单的答案

int / int = int

如果你想得到一个十进制类型的数字(这里讲数学,也就是任何带有小数的数字,从 3.0 到 3.14159),你必须做类似的事情......

double / int = double

int / double = double

所以只要投一个值,你就很好,这就是为什么以下工作......

double dblPagecount = (double)((decimal)totrecords /grdPages.PageSize);

请注意,不需要外部铸件,内部铸件应该是 double 类型!请阅读我在下面的评论,以大致了解您在这里所做的事情。

于 2013-09-26T08:18:47.350 回答