Questo è tecnicamente un linguaggio dipendente, ma quasi tutte le lingue trattano questo argomento allo stesso modo. Quando c'è una mancata corrispondenza del tipo tra due tipi di dati in un'espressione, la maggior parte delle lingue proverà a trasmettere i dati su un lato del=
per abbinare i dati sull'altro lato in base a un insieme di regole predefinite.
Quando si dividono due numeri dello stesso tipo (interi, doppi, ecc.) Il risultato sarà sempre dello stesso tipo (quindi 'int / int' risulterà sempre in int).
In questo caso hai
double var = integer result
che converte il risultato intero in un doppio dopo il calcolo, nel qual caso i dati frazionari sono già persi. (la maggior parte delle lingue eseguirà questo casting per evitare imprecisioni di tipo senza generare un'eccezione o un errore).
Se desideri mantenere il risultato come doppio, vorrai creare una situazione in cui hai
double var = double result
Il modo più semplice per farlo è forzare l'espressione sul lato destro di un'equazione a raddoppiare:
c = a/(double)b
La divisione tra un numero intero e un double risulterà nel cast dell'intero nel double (si noti che quando si fa la matematica, il compilatore spesso "esegue l'upcast" al tipo di dati più specifico per evitare la perdita di dati).
Dopo l'upcast, a
finirà come un doppio e ora hai la divisione tra due doppi. Questo creerà la divisione e l'assegnazione desiderati.
ANCORA, tieni presente che questo è specifico del linguaggio (e può anche essere specifico del compilatore), tuttavia quasi tutti i linguaggi (certamente tutti quelli a cui riesco a pensare fuori dalla mia testa) trattano questo esempio in modo identico.