我正在尝试在浮点数据类型上执行简单的模运算。
float a=3.14f;
float b=10f;
result=a%b;
我得到的结果为3.14
另一个例子使用十进制数据类型:
decimal p=10;
decimal q=40;
result=p%q;
得到答案=20。
我不明白模运算是如何工作的?
我正在尝试在浮点数据类型上执行简单的模运算。
float a=3.14f;
float b=10f;
result=a%b;
我得到的结果为3.14
另一个例子使用十进制数据类型:
decimal p=10;
decimal q=40;
result=p%q;
得到答案=20。
我不明白模运算是如何工作的?
x
和y
为正有限值,则x % y
的结果z
是通过计算x - n * y
得到的,其中n
是小于等于x / y
的最大整数。C#语言规范还清楚地概述了所有可能组合的非零有限值、零、无穷大和NaN的情况下,如何处理浮点数x % y
的表格。
y value
| +y –y +0 –0 +∞ –∞ NaN
-----+----------------------------
x +x | +z +z NaN NaN x x NaN
–x | –z –z NaN NaN –x –x NaN
v +0 | +0 +0 NaN NaN +0 +0 NaN
a –0 | –0 –0 NaN NaN –0 –0 NaN
l +∞ | NaN NaN NaN NaN NaN NaN NaN
u –∞ | NaN NaN NaN NaN NaN NaN NaN
e NaN | NaN NaN NaN NaN NaN NaN NaN
http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx
如果你执行int result = x % y;
,你会发现返回的是x % y
的余数,并且这些值被视为整数。例如,链接中的第三行是Console.WriteLine(5.0 % 2.2);
,它打印出.6
。这是因为它发现2.2最多只能被放入5.0两次。所以它做了5 - 2.2(2),得到的结果是.6。x % y
,它找到 y
完全地除 x
a
次,然后给出余数。这意味着 y * (a + 1)
将大于 x
,而 y * a
小于 x
。它给出 x
与 y * a
或 x - (y * a)
之间的差异。 - evanmcdonnal
%
的含义吗? - dan04