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

編集:

答えは、2 つの数値を除算して「-.#」の値を取り除き、整数の「1.-」を保持するような単純なものになると思います。私はこれについて知っていますが、これを行うためのよりスマートな方法があるに違いありませんか?

4

5 に答える 5

20

あなたが探しているものは整数除算と呼ばれます。モジュロ演算子とはまったく関係ありません。

整数除算を実行するには、どちらのオペランドも float/double でないことを確認してください。

例:

int one = 81 / 80;

これにより、たとえば1、whiledouble notOne = 81.0 / 80が得られます1.0125

于 2012-07-14T22:08:20.983 に答える
9

すでに答えが得られています。整数に割り当てる場合、小数を処理する必要はありません。

あなたのコメントでは、小数を扱っていると言っていますが、Math.Floorが可能です。すなわち:

double d = Math.Floor(81.0 / 80.0); // 1.0000....
于 2012-07-14T22:17:47.943 に答える
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 に答える