C#中的转换/转换int/double的解释

Osc*_*ley 11 .net c# casting implicit-cast

我编写了一些计算内容(我在下面复制了一个非常简化的例子),例如CASE2,并得到了不好的结果.像CASE1一样重构代码并且工作正常.我知道CASE 2中有一个隐含的演员,但不确定完整的原因.任何人都可以解释我下面究竟发生了什么?

  //CASE 1, result 5.5
    double auxMedia = (5 + 6);
    auxMedia = auxMedia / 2;

    //CASE 2, result 5.0
    double auxMedia1 = (5 + 6) / 2;

    //CASE 3, result 5.5
    double auxMedia3 = (5.0 + 6.0) / 2.0;

    //CASE 4, result 5.5
    double auxMedia4 = (5 + 6) / 2.0;
Run Code Online (Sandbox Code Playgroud)

我的猜测是,CASE2中的/ 2将(5 + 6)转换为int并导致舍入为5,然后再次转换为double并转换为5.0.

CASE3和CASE 4也解决了这个问题.

Mar*_*ell 13

  1. 5 + 6是整数11; 然后你再加注(在作业中)并除以2; 5.5
  2. 5 + 6是整数11; 整数运算时整数11/2 = 5,然后将其转换为double(在赋值中)
  3. 5.0 + 6.0是双11.0; 除以2.0,得到双倍5.5
  4. 5 + 6是整数11; 有一个隐含的强制转换为该分区加倍11.0,然后将双重2.0分为双5.5


Jam*_*Ide 5

为了扩展Marc(正确)答案,整数被解释为整数,而带小数的数字被解释为double.要将整数声明为文字双精度数,请向其附加"D":

        //CASE 2b, result 5.5
        double auxMedia2b = (5D + 6D) / 2;
Run Code Online (Sandbox Code Playgroud)