重複の可能性:C#で1/252 = 0の
除算を行うIntとDouble?
やあ、
金曜日だからかもしれませんが、私には理解できません。
(Double)1/2 = 0.5
(Double)1/(Double)2 = 0.5
(Double)((Double)1/(Double)2) = 0.5
(Double)(1/2) = 0.0
最後の操作が0であるのはなぜですか?:S
敬具。
重複の可能性:C#で1/252 = 0の
除算を行うIntとDouble?
やあ、
金曜日だからかもしれませんが、私には理解できません。
(Double)1/2 = 0.5
(Double)1/(Double)2 = 0.5
(Double)((Double)1/(Double)2) = 0.5
(Double)(1/2) = 0.0
最後の操作が0であるのはなぜですか?:S
敬具。
1と2は整数だからです。結果は0です。これをdoubleにキャストしても、まだ0です。この質問はほんの数日前に行われました。
2つのintを除算すると、結果もintになります。したがって、1/2は整数であるゼロを与えます。次に、0をdoubleにキャストしますが、これはまだゼロです。
これまでのところ、皆さんから正解があります。他の読者がコメントで見逃さないように、これを追加します。
通常の数学と同じルールを使用します。 最初に内括弧。 したがって、最初の例では、除算が行われる前に1がdoubleにキャストされ、結果がdoubleになります(intとdoubleを除算するとdoubleになります)。(Double)1/2
またはの場合、これは真に鳴ります1/(Double)2
。したがって、最後の例で(Double)(1/2)
は、(1/2)
が最初に実行され、intがintになり、結果としてintになります。次に、(Double)はそれをDoubleにキャストします。これがあなただけでなく、この質問に興味を持っている他の人にも役立つことを願っています。私自身、長い方程式があり、文字通り方程式の各パラメーターをdoubleにキャストしなければならなかったことが何度もありました。
(double)(1.0 / 2.0)を試してください-それはあなたが期待する答えを与えるでしょう。
すでに書いたように、問題はタイプです。接尾辞を使用して、タイプが正しいことを確認できます。
1d/2d=0.5
(Double)1/2 = 0.5
(Double)1/(Double)2 = 0.5
(Double)((Double)1/(Double)2) = 0.5
(Double)(1/2) = 0.0
最初の3つのケースでは、整数値(接尾辞を使用しないかドットを含まない場合の数値のデフォルトタイプ)をDoubleにキャストしてから、最初のケースでは整数値で除算し、2と3ではdoubleで除算します。角かっこが最初に演算の順序を変更する最後の(4)の場合とは対照的に、2つの整数を除算し、その後、結果をDoubleにキャストします。