Em outro exercício de Bruce Eckels, calcule a velocidade, v = s / t
onde s e t são números inteiros. Como faço para que a divisão inicie uma bóia?
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
Respostas:
Basta converter um dos dois operandos em um float primeiro.
O elenco tem maior precedência que a divisão, o que acontece antes da divisão.
O outro operando será efetivamente convertido automaticamente em um float pelo compilador porque as regras dizem que, se um operando for do tipo ponto flutuante, a operação será uma operação de ponto flutuante, mesmo que o outro operando seja integral. Especificação da linguagem Java, §4.2.4 e §15.17
fonte
Experimentar:
A moldagem das entradas em flutuadores permitirá que a divisão de ponto flutuante ocorra.
Você realmente só precisa lançar um, no entanto.
fonte
Converta um dos números inteiros em um ponto flutuante para forçar a operação a ser feita com a matemática de ponto flutuante. Caso contrário, a matemática inteira é sempre preferida. Assim:
fonte
Para diminuir o impacto na legibilidade do código, sugiro:
fonte
Você pode converter o numerador ou o denominador para flutuar ...
As operações int geralmente retornam int, então você precisa alterar um dos números de operação.
fonte
Você pode converter apenas um deles, mas por consistência, pode querer converter explicitamente os dois, para que algo como v = (float) s / (float) t funcione.
fonte
Padrão JLS
JLS 7 15.17.2. Operador de divisão / diz:
Isso é por que
1/2
que não dá uma bóia.Converter apenas um deles para flutuar como em
(float)1/2
é suficiente porque 15.17. Operadores multiplicativos dizem:e 5.6.2. A promoção numérica binária diz:
fonte
Lance um dos números inteiros / os dois inteiros para flutuar para forçar a operação a ser feita com ponto flutuante Math. Caso contrário, o número inteiro Math é sempre preferido. Assim:
fonte
Tente o seguinte:
fonte