Técnicamente, esto depende del idioma, pero casi todos los idiomas tratan este tema de la misma manera. Cuando hay una falta de coincidencia de tipos entre dos tipos de datos en una expresión, la mayoría de los lenguajes intentarán convertir los datos en un lado del =
para hacer coincidir los datos en el otro lado de acuerdo con un conjunto de reglas predefinidas.
Al dividir dos números del mismo tipo (enteros, dobles, etc.) el resultado siempre será del mismo tipo (por lo que 'int / int' siempre resultará en int).
En este caso, tiene lo
double var = integer result
que convierte el resultado entero en un doble después del cálculo, en cuyo caso los datos fraccionarios ya se han perdido. (la mayoría de los lenguajes harán esta conversión para evitar imprecisiones de tipo sin generar una excepción o error).
Si desea mantener el resultado como el doble, querrá crear una situación en la que tenga
double var = double result
La forma más fácil de hacerlo es forzar la expresión en el lado derecho de una ecuación para que se duplique:
c = a/(double)b
La división entre un entero y un doble resultará en convertir el entero al doble (tenga en cuenta que al hacer matemáticas, el compilador a menudo "convertirá" al tipo de datos más específico, esto es para evitar la pérdida de datos).
Después del upcast, a
terminará como un doble y ahora tienes una división entre dos dobles. Esto creará la división y asignación deseadas.
OTRA VEZ, tenga en cuenta que esto es específico del idioma (e incluso puede ser específico del compilador), sin embargo, casi todos los idiomas (ciertamente todos los que se me ocurren) tratan este ejemplo de manera idéntica.