Verzeihen Sie mir, wenn dies eine naive Frage ist, aber ich bin heute ratlos.
Ich habe eine einfache Divisionsberechnung wie folgt:
double returnValue = (myObject.Value / 10);
Wert ist ein int im Objekt.
Ich erhalte eine Nachricht mit der Aufschrift Möglicher Verlust von Brüchen. Wenn ich jedoch das Double in ein Int ändere, verschwindet die Nachricht.
Irgendwelche Gedanken darüber, warum dies passieren würde?
Antworten:
Wenn Sie zwei Ints in einen Gleitkommawert teilen, geht der Bruchteil verloren. Wenn Sie eines der Elemente in einen Float umwandeln, wird dieser Fehler nicht angezeigt.
Machen Sie zum Beispiel aus 10 eine 10.0
quelle
Sie führen eine Ganzzahldivision durch, wenn
myObject.Value
es sich um ein Int handelt, da beide Seiten vom/
Typ Ganzzahl sind.Um eine Gleitkommadivision durchzuführen, muss eine der Zahlen im Ausdruck vom Gleitkommatyp sein. Das wäre wahr, wenn myObject.Value ein Double oder eines der folgenden wäre:
quelle
Eine durch eine Ganzzahl geteilte Ganzzahl gibt eine Ganzzahl zurück. Wirf entweder den Wert auf ein Doppel oder dividiere durch 10,0.
quelle
Unter der Annahme, dass dies
myObject.Value
eine istint
, ist die GleichungmyObject.Value / 10
eine ganzzahlige Division, die dann in ein Doppel umgewandelt wird.Das bedeutet, dass myObject.Value mit 12 dazu führt, dass returnValue 1 und nicht 1,2 wird.
Sie müssen zuerst die Werte umwandeln:
Dies würde zu dem korrekten Wert 1.2 führen, der mindestens so korrekt ist, wie es Doppel aufgrund ihrer Einschränkungen zulassen, aber das wird an anderer Stelle auf SO fast endlos diskutiert :-).
quelle
Ich denke, da myObject ein int ist, sollten Sie
quelle