Isso é tecnicamente dependente do idioma, mas quase todos os idiomas tratam esse assunto da mesma forma. Quando há uma incompatibilidade de tipo entre dois tipos de dados em uma expressão, a maioria das linguagens tentará converter os dados em um lado do=
para corresponder aos dados do outro lado de acordo com um conjunto de regras predefinidas.
Ao dividir dois números do mesmo tipo (inteiros, duplos, etc.), o resultado será sempre do mesmo tipo (então 'int / int' sempre resultará em int).
Neste caso, você tem o
double var = integer result
que converte o resultado inteiro em um dobro após o cálculo , caso em que os dados fracionários já estão perdidos. (a maioria dos idiomas fará essa conversão para evitar imprecisões de tipo sem gerar uma exceção ou erro).
Se você gostaria de manter o resultado como um dobro, você vai querer criar uma situação em que tenha
double var = double result
A maneira mais fácil de fazer isso é forçar a expressão do lado direito de uma equação para dobrar:
c = a/(double)b
A divisão entre um inteiro e um duplo resultará na conversão do inteiro para o duplo (observe que, ao fazer matemática, o compilador freqüentemente fará um "upcast" para o tipo de dados mais específico para evitar a perda de dados).
Após o upcast, a
terminará como um duplo e agora você tem divisão entre dois duplos. Isso criará a divisão e atribuição desejadas.
NOVAMENTE, observe que isso é específico da linguagem (e pode até ser específico do compilador), no entanto, quase todas as linguagens (certamente todas as que eu consigo pensar de início) tratam esse exemplo de forma idêntica.