如何使2个整数的除法产生一个浮点而不是另一个整数?

时间:2009-04-24 21:50:07

标签: java

在计算速度的另一个Bruce Eckels练习中,v = s / t其中s和t是整数。我如何制作它以便分裂曲柄浮动?

class CalcV {
  float v;
  float calcV(int s, int t) {
    v = s / t;
    return v;
  } //end calcV
}

public class PassObject {

  public static void main (String[] args ) {
    int distance;
    distance = 4;

    int t;
    t = 3;

    float outV;

    CalcV v = new CalcV();
    outV = v.calcV(distance, t);

    System.out.println("velocity : " + outV);
  } //end main
}//end class

9 个答案:

答案 0 :(得分:268)

首先将两个操作数之一转换为浮点数。

v = (float)s / t;

演员阵容的优先级高于分区,因此在分组之前就会发生。

编译器会有效地自动将另一个操作数强制转换为浮点数,因为规则说如果任一操作数是浮点类型,则操作将是浮点操作,即使另一个操作数是整数。 Java Language Specification, §4.2.4§15.17

答案 1 :(得分:11)

尝试:

v = (float)s / (float)t;

将浮点数转换为浮点数将允许进行浮点除法。

但你真的只需要施放一个。

答案 2 :(得分:4)

为了减轻对代码可读性的影响,我建议:

v = 1d* s/t;

答案 3 :(得分:3)

将其中一个整数转换为浮点数以强制使用浮点数学运算完成操作。否则,整数数学始终是首选。所以:

v = (float)s / t;

答案 4 :(得分:3)

你甚至可以只使用其中一个,但为了保持一致性,你可能想要显式地转换它们,所以像v =(float)s /(float)t这样的东西应该可行。

答案 5 :(得分:2)

您可以将分子或分母转换为浮动...

int操作通常返回int,因此您必须更改其中一个操作数。

答案 6 :(得分:1)

JLS标准

JLS 7 15.17.2. Division Operator /说:

  

整数除法向0舍入。也就是说,操作数n和d为二进制数字提升后的整数(第5.6.2节)产生的商是一个整数值q,其大小尽可能大,同时满足| d· q | ≤| n |。此外,当| n |时,q为正≥| d |并且n和d具有相同的符号,但是当| n |时q为负≥| d |和n和d有相反的符号。

这就是1/2没有浮动的原因。

将{1>}中的任何一个转换为浮动,因为15.17. Multiplicative Operators说:

  

对操作数

执行二进制数字提升

5.6.2. Binary Numeric Promotion说:

  
      
  • 如果任一操作数的类型为double,则另一个操作数将转换为double。
  •   
  • 否则,如果任一操作数的类型为float,则另一个操作数转换为float
  •   

答案 7 :(得分:0)

将一个整数/两个整数转换为float以强制使用浮点Math完成操作。否则,整数Math始终是首选。 所以:

1. v = (float)s / t;
2. v = (float)s / (float)t;

答案 8 :(得分:0)

试试这个:

class CalcV 
{
      float v;
      float calcV(int s, int t)
      {
          float value1=s;
          float value2=t;
          v = value1 / value2;
          return v;
      } //end calcV
}