C#:分页、数学、天花板
我正在创建一些分页,我遇到了一个问题 如果我有一个数字12,我想用它除以5(5是我想要在一页上的结果数),我该如何正确地对它进行取整?这不起作用:C#:分页、数学、天花板,c#,.net,rounding,C#,.net,Rounding,我正在创建一些分页,我遇到了一个问题 如果我有一个数字12,我想用它除以5(5是我想要在一页上的结果数),我该如何正确地对它进行取整?这不起作用: int total = 12; int pages = Math.Ceiling(12 / 5); //pages = 2.4... but I need it to be 3 你可以做: int numPages = Math.Ceiling((decimal)12 / (decimal)5); 或 尽管您的代码应该可以运行,Math.Roun
int total = 12;
int pages = Math.Ceiling(12 / 5);
//pages = 2.4... but I need it to be 3
你可以做:
int numPages = Math.Ceiling((decimal)12 / (decimal)5);
或
尽管您的代码应该可以运行,
Math.Round
是错误的,但您可以尝试以下方法:
int pages = (total + pageSize - 1)/pageSize;
这应该与Math.天花
相同,只是您总是在Math.天花
返回时处理int
而不是double
编辑:要使代码正常工作,您可以尝试:
int pages = (int)Math.Ceiling((double)12/(double)5);
但是您应该使用第一个示例。如何将页面设置为2.4????一个
int
没有小数。页面实际上不是2.4。。。这个等式是2.4。这就是重点……好吧,你的问题可能是你没有把它转换成整数,并且处理整数算术总是以整数返回的事实。请在2秒钟内使用我的答案。@Tomas:将数学。上限(12/5)转换成整数不会有什么不同。它仍然是2而不是3。这就是为什么它说“并且处理整数算术总是以整数返回的事实”。。。也许不明显:)所以,即使12和5不是小数,我也必须将它们转换为小数?如果不是,你将对12进行整数除法,得到2。在那之后,你们将试着做数学题。2号女巫的上限仍然是2。除法在数学上限之前进行。如果你把12.0除以5.0,你会得到2.4个整数,上限会变成3。然而,正如托马斯·扬森所解释的那样,第二种选择更好。C#中的int/int总是返回和int。因此,如果你想要小数,你需要对它们进行强制转换,这样上限/舍入就可以按照你的预期工作。Math。第二个版本不需要上限
(实际上也不起作用,因为它只有双精度
和十进制
)的重载。@Phil-他的第二个版本可以工作,但是上限不需要:)。。。我想至少。我看不出你的编辑有什么用。第一行代码是否已经提供了正确的答案(3)?使用Math.Ceiling
的示例实际上无法编译Math.天花
对decimal
和double
具有重载。如果将它与int
一起使用,则会出现不明确的调用错误。@Phil:你确定吗?是否存在从int到double的隐式转换?但我确实更新了它,使之更像他在做的事情。有从int
到double
和int
到decimal
的隐式转换。编译器不知道使用这两个Math.Ceiling
重载中的哪一个。@Phil:+1很高兴知道。。。我很少使用这个函数,编写自己的函数并不难:)。
int pages = (int)Math.Ceiling((double)12/(double)5);