@jatan
Danke für deine Antwort wird gleich. Es macht Sinn. Kannst du mir bitte MathContext im Kontext der BigDecimal # Round Methode erklären.
Es gibt nichts besonderes über BigDecimal.round()
vs. andere BigDecimal
Verfahren. In allen Fällen gibt MathContext
die Anzahl der signifikanten Ziffern und die Rundungstechnik an. Grundsätzlich gibt es zwei Teile von jedem MathContext
. Es gibt eine Präzision, und es gibt auch eine RoundingMode
.
Die Genauigkeit gibt erneut die Anzahl der signifikanten Ziffern an. Wenn Sie also 123
als Zahl angeben und nach zwei signifikanten Ziffern fragen, erhalten Sie 120
. Es könnte klarer sein, wenn Sie in wissenschaftlicher Notation denken.
123
wäre 1.23e2
in wissenschaftlicher Notation. Wenn Sie nur 2 signifikante Ziffern behalten, erhalten Sie 1.2e2
oder 120
. Indem wir die Anzahl der signifikanten Stellen reduzieren, reduzieren wir die Genauigkeit, mit der wir eine Zahl angeben können.
Der RoundingMode
Teil gibt an, wie wir mit dem Verlust der Genauigkeit umgehen sollen. Um das Beispiel wiederzuverwenden, wenn Sie 123
als die Nummer verwenden und nach zwei signifikanten Ziffern fragen, haben Sie Ihre Genauigkeit verringert. Mit RoundingMode
von HALF_UP
(der Standardmodus) wird 123
120
werden. Mit einem RoundingMode
von CEILING
erhalten Sie 130
.
Zum Beispiel:
System.out.println(new BigDecimal("123.4",
new MathContext(4,RoundingMode.HALF_UP)));
System.out.println(new BigDecimal("123.4",
new MathContext(2,RoundingMode.HALF_UP)));
System.out.println(new BigDecimal("123.4",
new MathContext(2,RoundingMode.CEILING)));
System.out.println(new BigDecimal("123.4",
new MathContext(1,RoundingMode.CEILING)));
Ausgänge:
123.4
1.2E+2
1.3E+2
2E+2
Sie können sehen, dass sowohl die Präzision und der Rundungsmodus den Ausgang beeinflussen.
Gibt es eine Möglichkeit, '123.4' zu formatieren, indem man 2 signifikante Zahlen in einer Zeichenkette wie' 120' gibt? Das sind 2 signifikante Zahlen (wie "1.2E2"), weil abschließende Nullen normalerweise nicht beim Abrufen signifikanter Zahlen berücksichtigt werden, es sei denn, es gibt eine nachgestellte Dezimalzahl. Und für meine Zwecke, wenn die zu formatierende Zahl '103.4' war, ist es mir egal, dass Sie nicht sagen können, dass es zwei Sig-Feigen in der resultierenden' 100'-Zahl gibt. Ich möchte einfachere/sauberere Anzeige von Zahlen. – hepcat72