模数运算符的反面?

时间:2012-07-14 22:07:21

标签: c# integer-division

我记得在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#modulo运算符是否支持此行为?如果没有,怎么可能达到预期的行为?用最少的代码请......:D

编辑:

我想答案是简单的,比如将两个数字分开并去除' - 。#'值并保持整数'1.-'。我知道这一点,但必须有一个更明智的方式吗?

5 个答案:

答案 0 :(得分:13)

您要找的是整数除法。它完全与模运算符无关。

要执行整数除法,只需确保两个操作数都不是float / double。

示例:

int one = 81 / 80;

这会为您提供1,而double notOne = 81.0 / 80会为您提供1.0125

答案 1 :(得分:8)

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

在你的评论中,你说你正在使用小数,那么Math.Floor是可能的。即:

double d = Math.Floor(81.0 / 80.0); // 1.0000....

答案 2 :(得分: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

答案 3 :(得分:1)

在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的“对面”。

答案 4 :(得分:0)

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

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