Как сделать разделение 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
Ответы
Ответ 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
}