2

C# で型キャストをチェックするコードを書きました。次のコード:

using System;
class Convert{
    public static void Main(){
        double a=14.25,b=26.12;
        var z=(int)(a*b);
        Console.WriteLine("z= "+z);
        Console.ReadKey(true);
    }
}

出力を与えました:

z=372

しかし、コードを少し変更すると、変更前と変更後の z の値に大きな違いが生じました。

using System;
    class Convert{
        public static void Main(){
            double a=14.25,b=26.12;
            var z=(int)a*b;  // Modified part
            Console.WriteLine("z= "+z);
            Console.ReadKey(true);
        }
    }

出力を与えました:

z=365.68

元のコードからブラケットを削除した後、なぜそんなに違いがあるのか​​ わかりません。

4

4 に答える 4

7

外側の括弧がない場合、(int)キャストはのみに適用されaます。
したがって、切り捨てられた整数を通常の double で乗算することになり、型推論はvarになりdoubleます。

括弧を使用すると、キャストは乗算の結果に適用されます。したがって、結果全体が切り捨てられ、型推論は になりvarますint


したがって、 に変更vardoubleても、どちらの例にも影響はありません。(2番目のケースでは、切り捨てられintたものをdouble変数に割り当てます)

に変更varするintと、2 番目の例がコンパイラ エラーになります。

于 2012-10-26T14:07:04.863 に答える
2

括弧セットの優先度

var z=(int)(a*b);//(a*b) cast to int
var z=(int)a*b;//a cast to int and myltiply with b
于 2012-10-26T14:08:00.087 に答える
0

行で

var z=(int)a*b;

aは、乗算される前にintに変換されます。したがって、14*26.12になります。2番目のケースでは、a * bを乗算し、その結果を後でintに変換します。

于 2012-10-26T14:10:29.610 に答える
0

会話操作の優先度は()、乗算優先度よりも大きくなります。最初のケースでは:

double tmp = a*b;
int z = (int)tmp;

そして2番目に:

int tmp = (int)a;
double z = tmp * b;
于 2012-10-26T14:09:42.507 に答える