为什么-2%360在c#中给出-2而不是358#

Jon*_*nny 6 .net c# math

微软数学和谷歌的计算器给我358 -2%360,但C#和Windows计算器输出-2 ...这是正确的答案?

Eri*_*ert 12

根据C#规范,C#编译器正在做正确的事情,该规范指出对于整数:

结果x % y是产生的价值x – (x / y) * y.

请注意,(x/y)始终向零舍入.

有关如何计算二进制和十进制浮点数的余数的详细信息,请参阅规范的第7.8.3节.

这是否是"正确答案"取决于您查看余数操作的方式.其余部分必须满足以下标识:

dividend = quotient * divisor + remainder
Run Code Online (Sandbox Code Playgroud)

我说清楚-2%360是-2.为什么?好吧,首先问问自己商是什么.360进入-2的次数是多少?显然是零次!360根本不会进入-2.如果商为零,那么余数必须为-2才能满足同一性.如果说360总共进入-2次-1次,剩下的就是358次,那你觉得不是很奇怪吗?

  • @dlev:对于int上的每个基本C#操作都有IL指令肯定不是偶然的.IL设计师和C#设计师早在1999年就经常同时坐在同一个房间里.C#的设计是否符合IL?IL是否设计为与C#相匹配?谁知道?在时间的迷雾中迷失了. (3认同)

Dav*_*nan 7

哪个是正确的答案?

两个答案都是正确的.返回值仅仅是约定的问题.