Lassen Sie sich nicht auf Javas Big Decimal ein

Beachten Sie, dass mein Kollege süchtig nach Big Decimal war.

Was ist unveränderlich?

~~ Variablenwert ~~ Wenn Sie ein Objekt bearbeiten, wird das Umschreiben des Werts des ~~ Variablenobjekts selbst als "veränderlich" und nicht als "unveränderlich" bezeichnet. Für Java sind ~~ int und double ~~ Calendar veränderbar und String ist unveränderlich.

Welches ist BigDecimal?

Big Decimal API-Dokumentation https://docs.oracle.com/javase/jp/8/docs/api/java/math/BigDecimal.html

Werfen wir einen Blick auf die Add-Methode, die hinzufügt.

/**
Wert(this+augend)Maßstab ist max(this.scale(), augend.scale())Gibt die große Dezimalstelle zurück.
Parameter: augend -Der Wert, der zu dieser großen Dezimalstelle hinzugefügt werden soll.
Rückgabewert: this + augend
*/
public BigDecimal add(BigDecimal augend)

Was ist nun die Ausgabe des folgenden Codes?

public static void main(String args[]) {
    BigDecimal a = new BigDecimal("1");
    BigDecimal b = new BigDecimal("2");
    a.add(b);
    System.out.println(a);
}

Ausgabeergebnis.

1

Das? Ist es nicht 3? Ich dachte du. Ich habe einen wichtigen Satz in der API-Dokumentation übersehen.

** Unveränderlich **, vorzeichenbehaftete Dezimalzahl mit beliebiger Genauigkeit.

Mit anderen Worten bedeutete dieser Code, ** ein neues BigDecimal-Objekt mit dem Wert a + b ** zu erstellen und dieses Objekt zurückzugeben. Der Wert von a selbst ändert sich überhaupt nicht.

a.add(b);

Es war ein Code, der mit Big Decimal einen numerischen Wert aus der Datenbank abruft und Geld berechnet, aber ich fuhr mit dem Prozess fort, ohne das Ergebnis der Methode zuzuweisen, z. B. der Variablen hinzufügen, und es war ein brillanter Fehler.

Sie können unveränderliche Dinge nicht sehen, indem Sie einfach den Code schreiben ... Es war ein böser Fehler.

Recommended Posts

Lassen Sie sich nicht auf Javas Big Decimal ein
Java Big Decimal
Große Dezimalstelle in Kotlin