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

时间:2010-03-31 18:57:42

标签: c# .net 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;

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

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

4 个答案:

答案 0 :(得分:13)

  1. 5 + 6是整数11;然后你再加注(在作业中)并除以2; 5.5
  2. 5 + 6是整数11;整数算术下的整数11/2 = 5 然后 强制转换为双倍(在作业中)
  3. 5.0 + 6.0是双11.0;除以2.0加倍5.5
  4. 5 + 6是整数11;有一个隐含的强制转换为该分区加倍11.0,然后除以双2.0给予双5.5

答案 1 :(得分:5)

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

        //CASE 2b, result 5.5
        double auxMedia2b = (5D + 6D) / 2;

答案 2 :(得分:1)

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

(5 + 6)操作的结果是整数。因为两个操作数都是整数类型。然后,编译器执行11/2,其中两个操作数也是整数。最后一次除法的结果显然是5,因为它是一个整数除法(不知道正确的英文单词)。

答案 3 :(得分:1)

你是对的。 CASE 2使用整数运算,直到进行赋值。您还可以通过进行显式转换来解决问题:

double auxMedia1 = ((double) (5 + 6)) / 2;