Antworten:
Nach dem gleichen Javadoc:
Wenn das Argument NaN
eine Unendlichkeit oder eine positive Null oder eine negative Null ist, ist das Ergebnis dasselbe wie das Argument. Kann das nicht mit einem machen int
.
Der größte double
Wert ist auch größer als der größte int
, also müsste es ein sein long
.
Es ist für Präzision. Der doppelte Datentyp hat eine 53-Bit-Mantisse. Dies bedeutet unter anderem, dass ein Double ohne Präzisionsverlust alles Ganze bis zu 2 ^ 53 darstellen kann.
Wenn Sie eine so große Zahl in einer Ganzzahl speichern, erhalten Sie einen Überlauf. Ganzzahlen haben nur 32 Bit.
Die Ganzzahl als Double zurückzugeben ist hier das Richtige, da sie einen viel größeren nützlichen Zahlenbereich bietet als eine Ganzzahl.
Andere haben dir das Warum gesagt, ich werde dir sagen, wie man richtig rundet, wenn du das willst. Wenn Sie nur positive Zahlen verwenden, können Sie diese Anweisung verwenden:
int a=(int) 1.5;
Das (int) rundet jedoch immer in Richtung 0. Wenn Sie also eine negative Zahl machen möchten:
int a=(int) -1.5; //Equal to -1
In meinem Fall wollte ich das nicht tun. Ich habe den folgenden Code verwendet, um die Rundung durchzuführen, und er scheint alle Randfälle gut zu behandeln:
private static long floor(double a)
{
return (int) Math.floor(a);
}
(int) Math.floor(a)
? Es ist wahrscheinlich effizienter und kürzer.
(int) Math.floor(a)
dir kann einfach schreiben (int) a
, wenn a positiv ist.
So wie es in Java eine Ganzzahl- und eine Gleitkommadivision gibt, gibt es auch Ganzzahl- und Gleitkomma-Methoden, um Floor auszuführen:
double f = Math.floor(x);
oder
int k = (int) x;
Sie müssen jedoch immer vorsichtig sein, wenn Sie den Boden mit endlicher Präzisionsarithmetik verwenden: Ihre Berechnung von x kann etwa 1,99999999 ergeben, das von beiden Formen auf 1 und nicht auf 2 gesetzt wird. Es gibt viele Algorithmen, die diese Einschränkung umgehen müssen, um zu vermeiden, dass bei einigen Eingabewerten falsche Ergebnisse erzielt werden.
Damit Fehler und andere nicht ganzzahlige Werte eine Reihe von Berechnungen korrekt durchlaufen können.
Wenn Sie beispielsweise Not a Number (NaN) in Math.floor eingeben, wird es weitergegeben.
Wenn es eine Ganzzahl zurückgibt, kann es diesen Status oder diese Fehler nicht weitergeben, und Sie können schlechte Ergebnisse aus einer früheren Berechnung erhalten, die gut aussehen, aber nach der weiteren Verarbeitung falsch sind.