我正在开发自定义寻呼机控件到我的网格视图。
我使用以下语法来获取页面:
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
我得到了理想的结果,但无法理解为什么上面的synatax没有给出理想的结果。
当我在第一种情况下进行调试时,我观察到dblpagecount的结果为8.0,而8.2
任何人都可以澄清一下,上述陈述如何运作?
答案 0 :(得分:1)
我假设totrecords
和grdPages.PageSize
都属于int
类型。因此,无论<{1}}类型的,你最终会以整数运算执行除法,它会向0截断。但是,我实际上不会使用你的第二块代码(当然不会同时使用dblpagecount
和 double
- 混合这些几乎总是一个坏主意)。相反,我只是使用:
decimal
这将有效地“整理”而不需要任何浮点运算。
答案 1 :(得分:0)
简单回答
int / int = int
如果你想获得一个十进制数字(数学说这里,也就是任何带有小数的数字,从3.0到3.14159),你必须做类似......
double / int = double
int / double = double
所以只需投出一个值,你很好,这就是为什么以下工作......
double dblPagecount = (double)((decimal)totrecords /grdPages.PageSize);
请注意,不需要外部演员,内部演员应该是双重类型!请阅读下面的评论,以获得您在此处所做的一般想法。