模数运算如何与浮点数据类型一起使用?

use*_*347 6 .net c# floating-point modulo

我试图找出浮点数据类型的简单模数运算.

float a=3.14f;
float b=10f;
result=a%b;
Run Code Online (Sandbox Code Playgroud)

我得到结果= 3.14

使用十进制数据类型的另一示例

decimal p=10;
decimal q=40;
result=p%q;
Run Code Online (Sandbox Code Playgroud)

得到答案= 20.

我不明白模数是如何工作的?

Ale*_*exC 11

从C#语言规范中浮点余数.在x % yif xy是正有限值的情况下.

z是和的结果,x % y计算为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
Run Code Online (Sandbox Code Playgroud)

  • 我总是认为它是重复从 x 中减去 y 的结果,除非/直到 x 小于 y。(这显然效率低得多,但对我来说更容易理解。) (3认同)

eva*_*nal 5

msdn 上的这篇文章有足够的例子,但我可以很快解释它;

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) 即 0.6