1. Einführung in BigDecimal
BigDecimal besteht aus einem ganzzahligen nicht-skalischen Wert jeder Präzision und einer 32-Bit-Ganzzahl-Skala. Wenn es Null oder positiv ist, ist die Skala die Anzahl der Ziffern nach dem Dezimalpunkt. Wenn es sich um eine negative Zahl handelt, multiplizieren Sie den nicht skalierenden Wert der Zahl mit einer negativen Skalierungsleistung von 10. Daher ist der von BigDecimal dargestellte Wert ( unscaledValue × 10-scale ).
2. Einführung von BigDecimal
Bei Verwendung von Java-Programmiersprachen wie Banking und Finanzen, die eine hochpräzisen Berechnung der numerischen Werte erfordern, verwenden wir häufig BigDecimal und BigInteger anstelle der gemeinsamen int , long , float und double , insbesondere bei der Bearbeitung von Gleitkomma-Daten.
Schauen wir uns zunächst eine Codedemonstration der Verwendung des grundlegenden Datentyps für die Berechnung und Druckergebnisse double :
public class mellClass {public static void main (String [] args) {System.out.println (0,02+0,01); System.out.println (0,05+0,01); }}Die Ergebnisse sind wie folgt:
0.030.06000000000000000000005
Die Frage ist, warum Daten mit dem zweiten Ergebnis angezeigt werden. Der grundlegende Grund ist, dass unser Computer binär ist und binär nicht eine schwimmende Punktzahl genau darstellen kann. Es gibt bestimmte Fehler, wenn die CPU die Methode "Dorn und Exponent" (wissenschaftliche Notationsmethode) verwendet, um schwimmende Punktzahlen auszudrücken. Wenn die Anforderungen an die Datengenauigkeit relativ hoch sind, muss die BigDecimal -Klasse noch verwendet werden, obwohl die Berechnungsgeschwindigkeit etwas langsamer ist.
3. Bigdecimal -Verwendung
Es gibt zwei Möglichkeiten, ein BigDecimal -Objekt zu erstellen: Konstruktor und öffentliche statische Methode ( BigDecimal.valueOf ). Zwei Punkte müssen beachtet werden:
1. Der Konstruktor enthält zwei Formulare, die grundlegende Datentypen und Zeichenfolgen als Parameter verwenden. Letzteres wird empfohlen, wie new BigDecimal(Double.valueOf(0.09)) . Sie können es versuchen. Das Ausgabeergebnis System.out.println(new BigDecimal(0.06).toString()); Aussage ist: 0.059999999999999999997779553950749686919152736663818359375
2. Wenn Dezimales das Protokoll druckt oder in grundlegende Datentypen konvertiert, versuchen Sie, die von ihm bereitgestellte öffentliche Methode xxxValue() doubleValue() verwenden, z toString()
4. Bigdecimal Rounding -Modus
Obwohl die Datenbank eine hochpräzisen schwimmende Punktzahl speichert, muss in der Regel die Anzahl der Dezimalstellen einschränken, wenn sie in Anwendungen angezeigt werden, z. B. zwei bis drei Dezimalstellen. Zu diesem Zeitpunkt müssen Sie die Funktion SetScale ( int newScale, int roundingMode ) verwenden. Als öffentliche statische Variable von BigDecimal gibt es viele Betriebsregeln für den Rundungsmodus (Rundungsmodus) und acht öffentliche Typen. Hier ist eine Erklärung, und das offizielle Dokument stellt es auch vor.
1. Round_up
Rund von Null weg. Geben Sie den Teil ungleich Null auf und fügen Sie eine Nummer neben dem Teil ungleich Null hinzu.
2. Round_down
Runden in Richtung Null. Geben Sie den Teil ungleich Null auf und gleichzeitig wird die angrenzende Anzahl des Teils nicht verworfen, indem ein Teil nicht zum Teil ungleich Null hinzugefügt und das Verhalten abfängt.
3. Runde_Ceiling
Rund in Richtung Unendlicher. Wenn es sich um eine positive Zahl handelt, ist das Rundungsergebnis das gleiche wie bei Round_UP. Wenn es sich um eine negative Zahl handelt, ist das Rundungsergebnis das gleiche wie bei Round_down. Hinweis: Dieser Modus verringert die Wertgröße nicht.
4. Round_Floor
Rund in Richtung negativer Infinite. Wenn es sich um eine positive Zahl handelt, ist das Rundungsergebnis das gleiche wie bei Round_down. Wenn es sich um eine negative Zahl handelt, ist das Rundungsergebnis das gleiche wie bei Round_UP. Hinweis: Dieser Modus erhöht die Wertgröße nicht.
5. Round_Half_up
Abrunden auf die "nächstgelegene" Zahl ist ein Rundungsmodus der Aufwärtsrundung, wenn der Abstand zu zwei benachbarten Zahlen gleich ist. Wenn das Teil von> = 0,5 verworfen wird, ist das Rundungsverhalten das gleiche wie bei Round_UP. Andernfalls ist das Rundungsverhalten das gleiche wie bei Round_down. Dieses Muster nennen wir oft unsere "Rundung".
6. Round_Half_down
Die Abrunden auf die "engste" Zahl ist, wenn die Entfernung zu zwei benachbarten Zahlen gleich ist, ein Rundungsmodus der Abrundung. Wenn der weggeworfene Teil> 0,5 das Rundungsverhalten entspricht wie bei Round_UP; Andernfalls ist das Rundungsverhalten das gleiche wie bei Round_down. Dieses Modell nennen wir oft unsere "Runden".
7. Round_Half_even
Rund auf die "engste" Zahl, wenn die Entfernung zu zwei benachbarten Zahlen gleich ist, werden die benachbarten gleichmäßigen Zahlen gerundet. Wenn die ungerade Zahl links vom Teil verworfen wird, ist das Rundungsverhalten das gleiche wie bei Round_Half_UP; Wenn es sich um eine gleichmäßige Zahl handelt, ist das Rundungsverhalten das gleiche wie bei Round_Half_down. Hinweis: Dieser Rundungsmodus minimiert den Akkumulationsfehler bei wiederholten Berechnungsreihen. Dieser Rundungsmodus wird auch als "Banker -Rundungsmethode" bezeichnet und hauptsächlich in den USA verwendet. Runde sechs in sechs und fünf in zwei Situationen. Wenn der vorherige eine ungerade Zahl ist, wird die Position eingegeben, sonst wird sie aufgegeben.
8. Round_unningary
Der Betrieb der Assertion -Anforderung enthält genaue Ergebnisse, sodass keine Rundung erforderlich ist. Wenn dieser Rundungsmodus für eine Operation angegeben ist, die das genaue Ergebnis erzielt, wird eine Arithelexception geworfen.
Geben wir im Folgenden ein Beispiel zur Veranschaulichung der numerischen Berechnung in verschiedenen Rundungsmodi an und halten Sie eine Dezimalzahlung:
5. Zusammenfassung
Das obige ist die gesamte Einführung der Bigdecimal- und acht Rundungsmodi von Java. Ich hoffe, der Inhalt dieses Artikels wird für alle im Lernen von Java hilfreich sein.