15

我记得在java中,模运算符可以反转,因此您可以反转它而不是查看运算的余数,因此它会告诉您多次除以一个数字:

Console.WriteLine(1000 % 90);
Console.WriteLine(100 % 90);
Console.WriteLine(81 % 80);
Console.WriteLine(1 % 1);

输出:

  • 10
  • 10
  • 1
  • 0

示例由 DotNetPerls 提供

我不想看到其余部分,而是想看看“80”进入“81”的次数。应为 1,余数为 1。

c# 模运算符是否支持这种行为?如果没有,如何实现所需的行为?请使用最少的代码...:D

编辑:

我想答案将很简单,例如将两个数字相除并去掉“-.#”值并保持整数“1.-”。我知道这一点,但必须有一种更巧妙的方式来做到这一点?

4

5 回答 5

20

您要查找的内容称为整数除法。它根本与模运算符无关。

要执行整数除法,只需确保两个操作数都不是浮点数/双精度数。

例子:

int one = 81 / 80;

例如,这会给您1同时double notOne = 81.0 / 80给您1.0125

于 2012-07-14T22:08:20.983 回答
9

您已经得到了答案,如果将其分配给整数,则无需处理小数。

在您的评论中,您说您正在使用小数,那么Math.Floor是一种可能性。IE:

double d = Math.Floor(81.0 / 80.0); // 1.0000....
于 2012-07-14T22:17:47.943 回答
3

在 OpenOffice CALC 中有 QUOTIENT,它返回除法的整数部分 ᎓

      MOD(17;4) returns 1, while
 QUOTIENT(17;4) returns 4.

      MOD(33;9) returns 6, while
 QUOTIENT(33;9) returns 3.

我一直认为 QUOTIENT 是 MOD 的对应物——也许这就是 OP 所说的 MOD 的“对立面”。

于 2020-04-04T17:51:33.337 回答
1
Console.WriteLine(1000 % 90); // modulo = 10
Console.WriteLine(1000 / 90); // integer division = 11
Console.WriteLine(1000 / 90.0); // floating point division = 11.1111111111111

所以我有点明白你的问题,即使其他人都在你的案子上。为了平衡整数除法,您需要使用模运算符来处理余数:((1000 / 90) * 90) + (1000 % 90) == 1000

于 2012-07-14T22:18:29.797 回答
1

幸运的是,您提出的问题与模数的倒数不同。理论上,模的倒数可以给你一个未知的分子或除数。

例如,假设您有n % d = r. 你知道 r 和 d,而 n 是未知的。模函数表示为n % d = n - d*INT(n/d)。所以r = n - d*INT(n/d)。我想不出如何直接解决这个问题,因为当你不知道 n 时,你需要知道 INT(n/d)。

于 2016-12-17T09:07:29.017 回答