Dies ist technisch sprachabhängig, aber fast alle Sprachen behandeln dieses Thema gleich. Wenn zwischen zwei Datentypen in einem Ausdruck eine Typinkongruenz besteht, versuchen die meisten Sprachen, die Daten auf einer Seite des Ausdrucks so umzuwandeln, dass sie =
mit den Daten auf der anderen Seite gemäß einem Satz vordefinierter Regeln übereinstimmen.
Wenn Sie zwei Zahlen desselben Typs (Ganzzahlen, Doppelte usw.) teilen, ist das Ergebnis immer vom gleichen Typ (also führt 'int / int' immer zu int).
In diesem Fall haben Sie, double var = integer result
was das ganzzahlige Ergebnis nach der Berechnung auf ein Doppel umwandelt. In diesem Fall gehen
die Bruchdaten bereits verloren. (Die meisten Sprachen führen dieses Casting durch, um Typungenauigkeiten zu vermeiden, ohne eine Ausnahme oder einen Fehler auszulösen.)
Wenn Sie das Ergebnis als Doppel behalten möchten, möchten Sie eine Situation schaffen, in der Sie haben
double var = double result
Der einfachste Weg, dies zu tun, besteht darin, den Ausdruck auf der rechten Seite einer Gleichung zu zwingen, ihn zu verdoppeln:
c = a/(double)b
Die Trennung zwischen einer Ganzzahl und einem Doppel führt dazu, dass die Ganzzahl in das Doppel umgewandelt wird (beachten Sie, dass der Compiler beim Rechnen häufig auf den spezifischsten Datentyp "hochgespielt" wird, um Datenverlust zu vermeiden).
Nach dem Upcast a
wird als Doppel beendet und jetzt haben Sie die Aufteilung zwischen zwei Doppel. Dadurch wird die gewünschte Unterteilung und Zuordnung erstellt.
WIEDER, bitte beachten Sie, dass dies sprachspezifisch ist (und sogar compilerspezifisch sein kann), jedoch behandeln fast alle Sprachen (sicherlich alle, die mir auf den ersten Blick einfallen) dieses Beispiel identisch.