2012-12-21 4 views
9

Mit RoundingMode kann der Programmierer festlegen, auf welche Art und Weise Gleitkommazahlen gerundet werden sollen. Das ist großartig und alles, aber da ist diese eine Sache, die ich seltsam fand. Vielleicht habe ich in der Schule etwas Grundlegendes falsch verstanden.Warum Java RoundingMode HALF_UP Runde -2,5 bis -3?

Aber dieser Rundungsmodus wird als derjenige beschrieben, den ich in der Schule gelernt habe: "Immer auf die nächste Zahl und wenn tot in der Mitte, immer aufrunden.", Aber warum ist es rund -2,5 bis -3 ?

Ich schließe so viel, dass es in Bezug auf die absoluten Werte aufrundet, aber -2 ist für mich sicherlich von -2,5 "nach oben".

+0

Werfen Sie einen Blick auf diese Frage: http://stackoverflow.com/questions/269721/rounding-negative-numbers-in-java –

+0

http://docs.oracle.com/javase/1.5.0/docs/ api/java/math/RoundingMode.html Schau dir das an. Dies könnte Ihnen helfen, die gesuchte Methode zu finden. –

Antwort

6

RoundingMode.UP ist der Rundungsmodus für "weg von Null". RoundingMode.FLOOR ist in Richtung negativer Unendlichkeit, und CEILING ist in Richtung positiver Unendlichkeit. HALF_UP ist konsistent mit UP, wenn der Bruchteil genau 0,5 ist.

Sie mussten wählen einige Begriff zu bedeuten "weg von Null."

3

Die Begründung ist in den JavaDocs für RoundingMode.HALF_UP umrissen.

Rundungsmodus zum Runden auf "nächster Nachbar", wenn nicht beide Nachbarn äquidistant sind, dann aufrunden. Verhält sich wie bei RoundingMode.UP, wenn der verworfene Bruchteil> = 0,5 ist; ansonsten verhält sich wie bei RoundingMode.DOWN. Beachten Sie, dass dies der Rundungsmodus ist, der üblicherweise in der Schule gelehrt wird.

Der Wikipedia Artikel über Rundungsverfahren macht einen anderen Anspruch:

Zum Beispiel die von dieser Regel der Wert von 23,5 bis 24 gerundet wird, aber -23,5 wird auf -23 abgerundet.

Dies ist eine von zwei Regeln, die im Allgemeinen in den US-Grundschulklassen für Mathematik gelehrt werden.

Obwohl ein Zitat angefordert wurde.

+3

Das eigentliche Problem des OP scheint das Missverständnis zu sein, dass 'RoundingMode.UP' als" in Richtung positiver Unendlichkeit "interpretiert werden soll, was in dieser Antwort derzeit nicht behandelt wird. –