8

(int)(int1 / (float)var2.Count() * 100)

に相当

(int)((int1 / (float)var2.Count()) * 100)

...そして、浮動小数点または整数除算を使用しますか?

編集...上記の答えが「はい」の場合、ここで浮動小数点除算を実行する利点は何ですか?

4

8 に答える 8

13

/§7.2.1 の下で*は、同じ演算子の優先順位を持つため、2 つの結果は同じになるはずです (floatルールを使用)。

しかし、私は優先順位表を学ぶことを気にすることはできません。ブラケットだけ使ってます。次に、覚える必要なく、どの言語でも機能します。

もう 1 つの重要な質問は、最終的な(int)キャストの四捨五入です。「上」、「下」、または「バンカー」のどれになると予想しますか?

于 2010-07-19T10:04:45.493 に答える
3

優先順位の規則は覚えるのが本当に面倒なので、私も括弧を使ってあいまいさをなくすことを好みます。私は、「最初に人のためにコードを書き、次にコンピュータのためにコードを書く」というアドバイスに従うようにしています。しかし、ルール (の一部) を覚えるための興味深いニーモニック (Bruce Eckel の本から学んだこと) があります

Ulcer   - Unary (+, -, ++, --, !)
Addicts - Arithmetic (and shift) (+, -, *, /, %, <<, >>)
Really  - Relational (<, >, ==, <=, >=, !=)
Like    - Logical (and bitwise) (&&, ||, &, |, ^)
C       - Conditional ( ? : ) <- this is the conditional ternary operator
A lot   - Assignment ( =, *=, +=, ...)

完璧ではありません。ビット単位の演算子が押し込まれ、乗算演算子 (*、/、%) が加算演算子 (+、-) よりも優先されることを知っておく必要があります。

于 2010-07-19T15:27:33.773 に答える
2

それらは同等であり、浮動小数点除算を使用します。乗算が最初に行われたとしても、int は float*int の結果である float で除算されるため、浮動小数点除算が使用されます。

編集:

上記の答えが「はい」の場合、ここで浮動小数点除算を実行する利点は何ですか?

それは利点ですか?結果が異なるため、最初に考慮すべきことは、それが正しいかどうかです。コードから判断すると、パーセンテージを計算しようとしているようです。整数除算を使用する場合、"int1" が常に var2.Count() よりも小さい場合、結果は常に 0 になり、これは望ましくない可能性があります。

于 2010-07-19T10:03:34.233 に答える
1

C# 言語仕様:演算子の優先順位と結合性を参照してください。

于 2011-10-31T04:58:59.027 に答える
1

はい、除算と乗算は左から右に行う必要があります。したがって、それはフロート除算です。

PS:可能な限り置き換えてくださいfloatdouble

于 2010-07-19T10:04:14.603 に答える
0

それは同じだ。どちらも float 除算を使用します。

于 2010-07-19T10:04:04.557 に答える
0

はい、どちらも同等です。

どちらも浮動小数点除算を使用します。

于 2010-07-19T10:05:16.193 に答える
0

整数除算は答えの全体のみを返します。つまり、3/2 は 1 になりますが、浮動小数点除算は 1.5 になります。

于 2010-07-19T10:05:59.360 に答える