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

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

float a=3.14f; float b=10f; result=a%b; 

我得到结果= 3.14

另一个使用十进制数据类型

 decimal p=10; decimal q=40; result=p%q; 

得到答案= 20。

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

从C#语言规范中浮点余数。 在x % y的情况下,如果xy是正有限值。

zx % y的结果,计算为x – n * y ,其中n是小于或等于x / y的最大可能整数。

C#语言规范还清楚地概述了如何处理非零有限值,零,无穷大和NaN的所有可能组合的情况,其中浮点值可能出现x%y。

  y value | +y –y +0 –0 +∞ –∞ NaN -----+---------------------------- x +x | +z +z NaN NaN xx 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 

关于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),这是.6