C'est techniquement une langue dépendante, mais presque toutes les langues traitent ce sujet de la même manière. Lorsqu'il y a une incompatibilité de type entre deux types de données dans une expression, la plupart des langages essaieront de convertir les données d'un côté de =
pour qu'elles correspondent aux données de l'autre côté selon un ensemble de règles prédéfinies.
Lorsque vous divisez deux nombres du même type (entiers, doubles, etc.), le résultat sera toujours du même type (donc «int / int» donnera toujours int).
Dans ce cas, vous avez
double var = integer result
qui convertit le résultat entier en un double après le calcul, auquel cas les données fractionnaires sont déjà perdues. (la plupart des langages effectueront cette conversion pour éviter les inexactitudes de type sans déclencher d'exception ou d'erreur).
Si vous souhaitez conserver le résultat comme un double, vous allez vouloir créer une situation où vous avez
double var = double result
Le moyen le plus simple de le faire est de forcer l'expression du côté droit d'une équation à doubler:
c = a/(double)b
La division entre un entier et un double résultera en un transtypage de l'entier en double (notez qu'en faisant des maths, le compilateur "va souvent" vers le type de données le plus spécifique, ceci afin d'éviter la perte de données).
Après l'upcast, a
terminera comme un double et maintenant vous avez la division entre deux doubles. Cela créera la division et l'affectation souhaitées.
ENCORE, veuillez noter que cela est spécifique au langage (et peut même être spécifique au compilateur), cependant presque tous les langages (certainement tous ceux auxquels je peux penser par le haut de ma tête) traitent cet exemple de la même manière.