在使用C#或Java等语言时,我正在考虑如何显示分页控件.
如果我想要以每页y块的形式显示x项,那么需要多少页?
给定整数值,x并且yC和C++都返回作为q = x/y浮点等效的底数的商.我对一种返回天花板的方法很感兴趣.例如,ceil(10/5)=2和ceil(11/5)=3.
显而易见的方法包括:
q = x / y;
if (q * y < x) ++q;
Run Code Online (Sandbox Code Playgroud)
这需要额外的比较和乘法; 我见过的其他方法(事实上使用)涉及铸造为float或double.是否有更直接的方法可以避免额外的乘法(或第二个除法)和分支,并且还可以避免作为浮点数进行转换?
我试图找到在网站上构建寻呼机的总页数(所以我希望结果是一个整数.我得到一个记录列表,我想分成10页/页(页数)
当我这样做:
list.Count() / 10
Run Code Online (Sandbox Code Playgroud)
要么
list.Count() / (decimal)10
Run Code Online (Sandbox Code Playgroud)
而且list.Count() =12,我得到了结果1.
我将如何编码,以便2在这种情况下得到它(其余部分应该总是添加1)
我最近注意到将int()浮点数舍入到 0,而整数除法将浮点数舍入到它的下限。
例如:
-7 // 2 = -4
int(-7/2) = -3
Run Code Online (Sandbox Code Playgroud)
我已阅读指定的文档:
类 int(x, base=10)
返回一个由数字或字符串 x 构造的整数对象,如果没有给出参数,则返回 0。如果 x 是数字,则返回 x。整数()。对于浮点数,这会向零截断。
和:
楼层划分
向下舍入到最接近的整数的数学除法。楼层除法运算符是 //。例如,与 float true 除法返回的 2.75 相比,表达式 11 // 4 的计算结果为 2。请注意 (-11) // 4 是 -3,因为这是向下舍入的 -2.75。参见 PEP 238。
但对我来说,2 个类似的操作(浮点除法到整数)应该返回不同的结果似乎不合逻辑。
功能之间的差异是否有任何动机?
谢谢你。
我需要将一个整数分成两个数字.有点像除以2但我只想要整数组件,例如:
6 = 3 and 3
7 = 4 and 3
Run Code Online (Sandbox Code Playgroud)
我尝试了以下,但我不确定它是最好的解决方案.
var number = 7;
var part1 = 0;
var part2 = 0;
if((number % 2) == 0) {
part1 = number / 2;
part2 = number / 2;
}
else {
part1 = parseInt((number / 2) + 1);
part2 = parseInt(number / 2);
}
Run Code Online (Sandbox Code Playgroud)
这样做我想要的,但我认为这段代码不干净.
有更好的方法吗?
Math.Ceiling返回double因为double可能存储更大的数字.但是,如果我确定该int类型能够存储结果我应该如何转换?施放是否安全(int) Math.Ceiling(...?
我需要找到两个整数的除法并将其四舍五入到下一个上整数
例如 x = 7/y = 5 = 2 ; 这里x和y总是大于0
这是我目前的代码
int roundValue = x % y > 0? x / y + 1: x / y;
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点?
#define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S))
Run Code Online (Sandbox Code Playgroud)
有了上面的宏,有人可以帮我理解"(s)-1"部分,为什么会这样?
以及像:
#define PAGE_ROUND_DOWN(x) (((ULONG_PTR)(x)) & (~(PAGE_SIZE-1)))
#define PAGE_ROUND_UP(x) ( (((ULONG_PTR)(x)) + PAGE_SIZE-1) & (~(PAGE_SIZE-1)) )
Run Code Online (Sandbox Code Playgroud)
我知道"(〜(PAGE_SIZE-1)))"部分会将最后五位归零,但除此之外我无能为力,尤其是角色'&'运算符.
谢谢,
我有这种扩展方法,但我不知道是否已有内置运算符或者是否有名称:
public static class IntegerExtensions
{
public static int DivideWholeAndPartial(this int total, int divisor)
{
return (total / divisor) +
((total % divisor) == 0 ? 0 : 1);
}
}
Run Code Online (Sandbox Code Playgroud)
基本上如果总数相等,则返回.如果有任何剩余部分,则将其四舍五入 - 即包括部分整体.有点像"需要多少一升瓶装3.5升水"的问题.
我错过了任何内置的C#方法吗?这有名字吗?