Offizieller Javadoc sagt, dass Math.floor()
eine zurückgegeben double
wird, die "gleich einer mathematischen Ganzzahl" ist, aber warum sollte sie dann keine zurückgeben int
?
103
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.
quelle
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:
Das (int) rundet jedoch immer in Richtung 0. Wenn Sie also eine negative Zahl machen möchten:
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:
quelle
(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.Was möchten Sie, dass es zurückkehrt, wenn Sie es doppelt so groß wie das größte int oder long geben?
(Zugegeben, wenn es größer als die größte Länge ist, ist die Genauigkeit ohnehin gering - es ist möglicherweise nicht die nächste theoretische Ganzzahl - aber trotzdem ...)
quelle
So wie es in Java eine Ganzzahl- und eine Gleitkommadivision gibt, gibt es auch Ganzzahl- und Gleitkomma-Methoden, um Floor auszuführen:
oder
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.
quelle
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.
quelle