Подтвердить что ты не робот

Как сделать разделение 2 ints порождать float вместо другого int?

В другом упражнении Брюса Эккеля при вычислении скорости 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
4b9b3361

Ответ 1

Просто перенесите один из двух операндов в поплавок.

v = (float)s / t;

Литье имеет более высокий приоритет, чем деление, поэтому происходит до деления.

Другой операнд будет автоматически автоматически передан в float компилятором, потому что правила говорят, что если любой из операндов имеет тип с плавающей точкой, то операция будет работать с плавающей точкой, даже если другой операнд является интегральным. Спецификация языка Java, §4.2.4 и §15.17

Ответ 2

Try:

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

Передача меток ints в float позволит провести деление с плавающей запятой.

Вам действительно нужно всего лишь бросить.

Ответ 3

Чтобы уменьшить влияние на читаемость кода, я бы предложил:

v = 1d* s/t;

Ответ 4

Передайте одно из целых чисел в float, чтобы заставить операцию выполнить с математикой с плавающей запятой. Иначе целочисленная математика всегда предпочтительна. Итак:

v = (float)s / t;

Ответ 5

Вы можете отбросить хотя бы одну из них, но для согласованности вы можете явно указать, что должно работать как-то вроде v = (float) s/(float) t.

Ответ 6

Вы можете использовать числитель или знаменатель для плавания...

Операции

int обычно возвращают int, поэтому вам нужно изменить одно из операндов.

Ответ 7

Передайте одно из целых чисел/оба целого числа для float, чтобы заставить операцию выполнить с помощью математической математики с плавающей запятой. Иначе целочисленная математика всегда предпочтительна. Итак:

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

Ответ 8

Стандарт JLS

JLS 7 15.17.2. Оператор отдела / говорит:

Целые деления округляются до 0.

Вот почему 1/2 не дает float.

Преобразование одного из них для float как в (float)1/2 достаточно, потому что 15.17. Мультипликативные операторы говорят:

Двоичное числовое продвижение выполняется в операндах

и 5.6.2. Двоичное числовое продвижение говорит:

  • Если один из операндов имеет тип double, другой преобразуется в double.
  • В противном случае, если любой операнд имеет тип float, другой преобразуется в float

Ответ 9

Попробуйте следующее:

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