代码之家  ›  专栏  ›  技术社区  ›  Oscar Foley

C中转换int/double的说明#

  •  11
  • Oscar Foley  · 技术社区  · 14 年前

    我编写了一些计算程序(我在下面复制了一个非常简单的例子),比如CASE2,结果很糟糕。像CASE1一样重构代码,效果很好。我知道在案例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;
    

    案例3和案例4也解决了这个问题。

    4 回复  |  直到 14 年前
        1
  •  13
  •   David Hall    14 年前
    1. 5+6是整数11;整数11/2= 5. 然后 (在作业中)加倍
    2. 5.0+6.0为双11.0;除以2.0得到5.5
    3. 5+6是整数11;对于除法,有一个隐式转换为double 11.0,然后除以double 2.0,得到double 5.5
        2
  •  5
  •   Jamie Ide    14 年前

    把马克的(正确的)答案展开一点,整数被解释为整数,而带小数点的数字被解释为双精度。要将整数声明为文字双精度,请在其后面附加一个“D”:

            //CASE 2b, result 5.5
            double auxMedia2b = (5D + 6D) / 2;
    
        3
  •  1
  •   Keltex    14 年前

    你说得对。案例2使用整数运算直到赋值完成。您还可以通过显式转换来解决此问题:

    double auxMedia1 = ((double) (5 + 6)) / 2;
    
        4
  •  1
  •   n535    14 年前
    //CASE 2, result 5.0
    double auxMedia1 = (5 + 6) / 2;
    

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