とても簡単な質問をして本当に申し訳ありませんが、私は本当に何が問題なのか理解できません。任意のマークを12年生のスケールに変換したいと思います。私はこれを次のようにしようとしています:
double coef=(4/20)*12;
int mark=(int)coef;
しかし、デバッガーを介してこのコードを実行するcoef
と、ゼロに等しいことがわかります。これが二重変数である場合はなぜですか?
とても簡単な質問をして本当に申し訳ありませんが、私は本当に何が問題なのか理解できません。任意のマークを12年生のスケールに変換したいと思います。私はこれを次のようにしようとしています:
double coef=(4/20)*12;
int mark=(int)coef;
しかし、デバッガーを介してこのコードを実行するcoef
と、ゼロに等しいことがわかります。これが二重変数である場合はなぜですか?
結果を値に代入しているにもかかわらず、計算は整数を使用して実行されるためです。また、C# の整数演算では. だからあなたは次のようなものが必要ですdouble
4 / 20
0
double coef = 4.0 / 20 * 12;
これ4.0
により、残りの計算でdouble
s が使用されるようになります。しかし、多くの場合、読者が型変換規則について知る必要がないように、すべての数値を明示的にすることは実際には良い習慣です。
double coef = 4.0 / 20.0 * 12.0;
別の方法は次のとおりです。
4 * 12 / 20;
ただし、結果が 2 に切り捨てられることに注意してください (これはまだ整数除算であるため) int
。
また、へのキャストint
は丸めではなく切り捨てられることに注意してください。Math.Round
実際に結果を丸めたい場合に使用します。あなたが与えた数値と違いはありませんが、実際にはこれらの定数だけで作業することはないと思います!
変換が必要になるまで整数除算です...
4/20 = 0
0 * 12 = 0
最初に整数除算を行い、次に 12 を掛けます。
あなたがするとき:
(4/20)
どちらも整数であるため、これは 0 に評価されます。
次のように double を明示的に指定するように変更します。
double coef = (4.0 / 20.0) * 12;
試す
double coef = (4.0/20.0)*12;
それから
int mark = (int)coef;
コード内のすべての定数は整数であり、整数としての 4/20 の結果は 0 です。
次のように書き直します。
(4.0/20.0)*12.0;