En otro ejercicio de Bruce Eckels para calcular la velocidad, v = s / t
donde syt son enteros. ¿Cómo hago para que la división produzca un flotador?
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
Respuestas:
Solo lanza uno de los dos operandos a un flotador primero.
El elenco tiene mayor prioridad que la división, por lo que sucede antes de la división.
El otro operando será efectivamente lanzado automáticamente a un flotante por el compilador porque las reglas dicen que si cualquiera de los operandos es de tipo de punto flotante, entonces la operación será una operación de punto flotante, incluso si el otro operando es integral. Especificación del lenguaje Java, §4.2.4 y §15.17
fuente
Tratar:
Lanzar las entradas a flotadores permitirá que tenga lugar la división de punto flotante.
Sin embargo, realmente solo necesitas lanzar uno.
fuente
Lanza uno de los enteros a un flotador para forzar que la operación se realice con matemática de coma flotante. De lo contrario, siempre se prefiere la matemática entera. Entonces:
fuente
Para disminuir el impacto en la legibilidad del código, sugeriría:
fuente
Puedes lanzar el numerador o el denominador para flotar ...
Las operaciones int generalmente devuelven int, por lo que debe cambiar uno de los números operantes.
fuente
Puede lanzar incluso solo uno de ellos, pero por coherencia, es posible que desee emitir explícitamente ambos para que algo como v = (float) s / (float) t funcione.
fuente
Estándar JLS
JLS 7 15.17.2. División Operador / dice:
Es por eso
1/2
que no da un flotador.Convirtiendo cualquiera de las dos para flotar como es
(float)1/2
suficiente porque 15.17. Los operadores multiplicativos dicen:y 5.6.2. La promoción numérica binaria dice:
fuente
Emite uno de los enteros / ambos enteros para flotar para forzar que la operación se realice con matemática de coma flotante. De lo contrario, siempre se prefiere la matemática entera. Entonces:
fuente
Prueba esto:
fuente