In Java möchte ich ein Double in eine Ganzzahl konvertieren. Ich weiß, wenn Sie dies tun:
double x = 1.5;
int y = (int)x;
Sie erhalten y = 1. Wenn du das tust:
int y = (int)Math.round(x);
Sie werden wahrscheinlich 2 erhalten. Ich frage mich jedoch: Da doppelte Darstellungen von ganzen Zahlen manchmal wie 1,9999999998 oder so aussehen, besteht die Möglichkeit, dass das Wirken eines über Math.round () erstellten Doppelten immer noch zu einer abgeschnittenen Zahl führt als die gerundete Zahl, nach der wir suchen (dh: 1 statt 2 im Code wie dargestellt)?
(und ja, ich meine es als solches: Gibt es einen Wert für x, bei dem y ein Ergebnis anzeigt, das eher eine abgeschnittene als eine gerundete Darstellung von x ist?)
Wenn ja: Gibt es eine bessere Möglichkeit, aus einem Double ein gerundetes Int zu machen, ohne das Risiko einer Kürzung einzugehen?
Etwas herausgefunden: Math.round (x) gibt ein langes, kein doppeltes zurück. Daher: Für Math.round () ist es unmöglich, eine Zahl zurückzugeben, die wie 3.9999998 aussieht. Daher muss int (Math.round ()) niemals etwas abschneiden und funktioniert immer.
Antworten:
Nein,
round()
wird Ihr Double immer auf den richtigen Wert runden und dann auf einen Wert umgewandelt,long
der alle Dezimalstellen abschneidet. Nach dem Runden bleiben jedoch keine Bruchteile übrig.Hier sind die Dokumente von
Math.round(double)
:quelle
[max double: 1.7976931348623157E308]
zu int, das viel viel kleiner ist[max int: 2147483647]
. Nur etwas zu beachten.Für den Datentyp
Double
toint
können Sie Folgendes verwenden:quelle
Hat meinen Zweck gelöst.
quelle