代码之家  ›  专栏  ›  技术社区  ›  Rich

浮点/整数隐式转换

  •  21
  • Rich  · 技术社区  · 15 年前

    我在做乘法和除法 float s和 int 我和s忘记了隐含的转换规则(而且问题中的单词对谷歌来说似乎太模糊了,比在这里提问要快得多)。

    内景 s、 但是我想做浮点除法,我只需要转换一个或两个操作数吗?如果我乘一个 浮动 内景 ,答案是 ?

    6 回复  |  直到 13 年前
        1
  •  33
  •   Ry- Vincenzo Alcamo    13 年前

    不能指定给 int 从a的除法得到的结果 float 内景 反之亦然。

    如果我有两个 s、 但我想做浮点除法?

    一个演员就够了。

    如果我乘一个 还有一个 内景 浮动

    是的。


    float f = 1000f;
    int i = 3; 
    
    f = i; // Ok
    i = f; // Error
    
    f = i/f; //Ok 0.003
    f = f/i; //Ok 333.3333(3)
    
    i = i/f; //Error
    i = f/i; //Error
    
        2
  •  11
  •   Bozho    15 年前

    证明:

     int i1 = 5;
     float f = 0.5f;
     int i2 = 2;
     System.out.println(i1 * f);
     System.out.println(i1 / i2);
     System.out.println(((float) i1) / i2);
    

    2.5
    2 
    2.5
    
        3
  •  7
  •   Matt Ball    15 年前

    为了使用整数执行任何类型的浮点运算,需要将(read:cast)至少一个操作数转换为 float 键入。

        4
  •  7
  •   blizpasta    15 年前

    如果 键入,则操作是 另一个是积分。

    (来源: Java language specifications - 4.2.4

    如果我把一个浮点数和一个整数相乘,答案是浮点数吗?

    System.out.println(((Object)(1f*1)).getClass());//class java.lang.Float
    

    (如果使用DrJava,只需在interactions面板中键入((Object)(1f*1)).getClass()。还有一个用于Eclipse的DrJava插件。)

        5
  •  6
  •   user207421    15 年前

    简单的答案是Java将自动执行扩展转换,而不是缩小转换。因此,例如int->float是自动的,但float->int需要转换。

        6
  •  0
  •   supercat    11 年前

    int < long < float < double . 如果一个运算符与不同的基元类型一起使用,则上面列表中出现在另一个运算符之前的类型将被隐式转换为另一个运算符,而无需任何编译器诊断,即使在这种情况下会导致精度损失。例如, 16777217-1.0f float 还有一个 int 超出范围+/-16777216应通过铸造 内景 double ,执行操作,然后(如果需要)将结果强制转换为 . 我觉得双重强制转换的要求很烦人,但是Java中的类型强制转换规则要求要么使用烦人的双重强制转换,要么遭受精度损失。