Konvertierung von double in integer in java

In Java möchte ich einen Double in einen Integer umwandeln, ich weiß, wenn Sie das tun:

double x = 1.5;
int y = (int)x;

erhält man y=1. Wenn Sie dies tun:

int y = (int)Math.round(x);

erhalten Sie wahrscheinlich 2. Ich frage mich jedoch: Da Double-Darstellungen von Ganzzahlen manchmal wie 1,9999999998 oder so aussehen, besteht die Möglichkeit, dass das Casting eines mit Math.round() erstellten Doubles immer noch zu einer abgeschnittenen Zahl führt und nicht zu der gerundeten Zahl, nach der wir suchen (d. h.: 1 statt 2 im dargestellten Code)?

(und ja, ich meine es auch so: Gibt es irgendeinen 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 einen gerundeten int zu machen, ohne das Risiko des Abschneidens einzugehen?


Ich habe etwas herausgefunden: Math.round(x) gibt einen long zurück, nicht einen double. Daher ist es unmöglich, dass Math.round() eine Zahl zurückgibt, die wie 3,9999998 aussieht. Daher muss int(Math.round()) nie etwas abschneiden und wird immer funktionieren.

Lösung

besteht die Möglichkeit, dass die Umwandlung eines mit "Math.round()" erzeugten Double-Wertes immer noch zu einer abgeschnittenen Zahl führt?

Nein, round() rundet Ihren Double immer auf den korrekten Wert, und dann wird er in einen long umgewandelt, der alle Nachkommastellen abschneidet. Aber nach der Rundung bleiben keine Nachkommastellen übrig.

Hier sind die Unterlagen von Math.round(double):

Liefert den dem Argument am nächsten liegenden Long-Wert. Das Ergebnis wird auf eine ganze Zahl gerundet, indem 1/2 addiert wird, die Grundzahl des Ergebnisses genommen wird und das Ergebnis in den Typ long gegossen wird. Mit anderen Worten: Das Ergebnis ist gleich dem Wert des Ausdrucks:

(long)Math.floor(a + 0.5d)

Kommentare (3)

Für den Datentyp Double zu int können Sie folgendes verwenden:

Double double = 5.00;

int integer = double.intValue();
Kommentare (2)
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);

Ich habe meine Aufgabe gelöst.

Kommentare (0)