¿Por qué lanzamos por separado a “flotar” en una división entera?

Por ejemplo:

int number1 = 1, number2= 2; float variable = (float)number1/(float)number2; 

En lugar de esto, ¿por qué no podemos usar “flotar” solo una vez? Por ejemplo:

 int number1 = 1, number2= 2; float variable = (float)(number1/number2); 

El objective es evitar el truncamiento que viene con la división entera. Esto requiere que al menos uno de los operandos de la división sea un número de punto flotante. Por lo tanto, solo necesitas un modelo para float , pero en el lugar correcto. Por ejemplo,

 float variable = number1/(float)number2; // denominator is float 

o

 float variable = ((float)number1)/number2; // numerator is float 

Tenga en cuenta que en el segundo ejemplo, se agregó un conjunto adicional de paréntesis para mayor claridad, pero debido a las reglas de precedencia, es lo mismo que

 float variable = (float)number1/number2; // numerator is float, same as above 

También tenga en cuenta que en su segundo ejemplo,

 float variable = (float)(number1/number2); 

La conversión a float se aplica después de la división entera, por lo que esto no evita el truncamiento. Como el resultado de la expresión se asigna a un float todos modos, es el exacto de

 float variable = number1/number2; 

Puedes escribir cualquiera de las expresiones, pero obtienes diferentes resultados.

Con float variable = (float)(number1 / number2); el valor en variable es 0, porque la división se realiza como división entera, y 1/2 es 0, y el resultado se convierte.

Con float variable = (float)number1 / (float)number2; , el valor en variable es 0.5, porque la división se realiza como división de punto flotante.

Cualquiera de los lanzamientos en la float variable = (float)number1 / (float)number2; se puede omitir y el resultado es el mismo; el otro operando se convierte de int a float antes de que ocurra la división.

Dado que number2 y number2 son int s, la división realizada será una división integral. Por lo tanto, number1/number2 evaluará al int 0. Para hacer aritmética de punto flotante, necesitas convertirlos. Tenga en cuenta que basta con lanzar una, ya que la otra será promovida implícitamente. Entonces, solo puede decir ((float)number1)/number2 .

En el primer caso,

1/2 resultados 0

En el segundo caso, puede usar float una vez, pero debe aplicarse con uno de los números antes de la división

1.0 / 2.0 o 1.0 / 2 o 1 / 2.0 resultados 0.5