as-*_*cii 116
在提出此类问题之前,请查看MSDN文档.
除以两个整数后,结果始终为整数.例如,7/3的结果是2.要确定7/3的余数,请使用余数运算符(%).
int a = 5;
int b = 3;
int div = a / b; //quotient is 1
int mod = a % b; //remainder is 2
Run Code Online (Sandbox Code Playgroud)
dan*_*van 74
还有 Math.DivRem
quotient = Math.DivRem(dividend, divisor, out remainder);
Run Code Online (Sandbox Code Playgroud)
Rio*_*ams 14
使用/
运营商执行分部:
result = a / b;
Run Code Online (Sandbox Code Playgroud)
Modulo除法使用%
运算符完成:
result = a % b;
Run Code Online (Sandbox Code Playgroud)
Jer*_*all 14
有趣的事实!
'模数'操作定义为:
a % n ==> a - (a/n) * n
Run Code Online (Sandbox Code Playgroud)
参考:模块化算术
所以你可以自己动手,虽然它比内置%运算符慢FAR:
public static int Mod(int a, int n)
{
return a - (int)((double)a / n) * n;
}
Run Code Online (Sandbox Code Playgroud)
编辑:哇,最初在这里发生了相当严重的错误,感谢@joren抓住了我
现在我在这里依赖的事实是C#中的division + cast-to-int相当于Math.Floor
(即,它会丢弃分数),但是"真正的"实现将改为:
public static int Mod(int a, int n)
{
return a - (int)Math.Floor((double)a / n) * n;
}
Run Code Online (Sandbox Code Playgroud)
实际上,您可以通过以下方式查看%和"true modulus"之间的差异:
var modTest =
from a in Enumerable.Range(-3, 6)
from b in Enumerable.Range(-3, 6)
where b != 0
let op = (a % b)
let mod = Mod(a,b)
let areSame = op == mod
select new
{
A = a,
B = b,
Operator = op,
Mod = mod,
Same = areSame
};
Console.WriteLine("A B A%B Mod(A,B) Equal?");
Console.WriteLine("-----------------------------------");
foreach (var result in modTest)
{
Console.WriteLine(
"{0,-3} | {1,-3} | {2,-5} | {3,-10} | {4,-6}",
result.A,
result.B,
result.Operator,
result.Mod,
result.Same);
}
Run Code Online (Sandbox Code Playgroud)
结果:
A B A%B Mod(A,B) Equal?
-----------------------------------
-3 | -3 | 0 | 0 | True
-3 | -2 | -1 | -1 | True
-3 | -1 | 0 | 0 | True
-3 | 1 | 0 | 0 | True
-3 | 2 | -1 | 1 | False
-2 | -3 | -2 | -2 | True
-2 | -2 | 0 | 0 | True
-2 | -1 | 0 | 0 | True
-2 | 1 | 0 | 0 | True
-2 | 2 | 0 | 0 | True
-1 | -3 | -1 | -1 | True
-1 | -2 | -1 | -1 | True
-1 | -1 | 0 | 0 | True
-1 | 1 | 0 | 0 | True
-1 | 2 | -1 | 1 | False
0 | -3 | 0 | 0 | True
0 | -2 | 0 | 0 | True
0 | -1 | 0 | 0 | True
0 | 1 | 0 | 0 | True
0 | 2 | 0 | 0 | True
1 | -3 | 1 | -2 | False
1 | -2 | 1 | -1 | False
1 | -1 | 0 | 0 | True
1 | 1 | 0 | 0 | True
1 | 2 | 1 | 1 | True
2 | -3 | 2 | -1 | False
2 | -2 | 0 | 0 | True
2 | -1 | 0 | 0 | True
2 | 1 | 0 | 0 | True
2 | 2 | 0 | 0 | True
Run Code Online (Sandbox Code Playgroud)