Packed Decimal
Die Klasse PackedDecimal dienst zum speicherschonende Speichern von Zahlen. Sie greift die Idee von COBOL auf, wo es den numerischen Datentyp "COMPUTATIONAL-3 PACKED" gibt, wo die Zahlen in Halb-Bytes (Nibbles) abgespeichert wird. D.h. In einem Byte lassen sich damit 2 Zahlen abspeichern. Diese Praesentation ist auch als BCD (Binary Coded Decimal) bekannt (s. BCD-Code in Wikipedia).
Dieser Datentyp eignet sich damit fuer:
Abspeichern grosser Menge von Zahlen, wenn dabei die interne Speichergroesse relevant ist,
Abspeichern von Zahlen beliebiger Groesse (Ersatz fuer java.math.BigDecimal,
Abspeichern von Zahlen mit fuehrender Null (z.B. Vorwahl).
Eine noch kompaktere Darstellung (ca. 20%) laesst sich mit der Chen-Ho- oder Densely-Packed-Decimal-Kodierung (s. A Summary of Densely Packed Decimal encoding). Diese kommt hier aber nicht zum Einsatz. Stattdessen kommt der BCD-Algorithmus zum Einsatz. Dadurch koennen auch weitere Trenn- und Fuell-Zeichen aufgenommen werden:
Vorzeichen (+, -)
Formattierung ('.', ',')
Leerzeichen
Trennzeichen (z.B. fuer Telefonnummern)
Die einzelnen Werte, die ein Halb-Byte (Nibble) aufnimmt, sind (angelehnt an COMPUTATIONAL-3 PACKED in COBOL):
+-----+---+--------------------------------------------------+ | 0x0 | 0 | Ziffer 0 | | 0x1 | 1 | Ziffer 1 | | ... | | | | 0x9 | 9 | Ziffer 9 | | 0xA | / | Trennzeichen fuer Brueche | | 0xB | | Leerzeichen (Blank) | | 0xC | + | positives Vorzeichen | | 0xD | - | negatives Vorzeichen | | 0xE | . | Formatzeichen Tausenderstelle (im Deutschen) | | 0xF | , | Trennung Vorkomma/Nachkommastelle (im Deutschen) | +-----+---+--------------------------------------------------+*
Damit koennen auch Zeichenketten nachgebildet werden, die strenggenommen keine Dezimalzahl darstellen, z.B. "+49/811 32 16-8". Dies ist zwar zulaessig, jedoch duerfen damit keine mathematische Operation angewendet werden. Ansonsten kann die Klasse ueberall dort eingesetzt werden, wo auch eine java.math.BigDecimal verwendet wird.
Die API orientiert sich an die API von BigDecimal und ist auch von der Number-Klasse abgeleitet. Allerdings werden noch nicht alle Methoden von unterstuetzt. In diesem Fall kann man auf die Methode .toBigDecimal ausweichen.
Da diese Klasse eher eine technische als eine fachliche Klasse ist, wurde die englische Bezeichnung aus COBOL uebernommen. Sie wird von einigen Fachwert-Klassen intern verwendet, kann aber auch fuer eigene Zwecke verwendet werden.
Author
oboehm
Since
0.6 (29.03.2018)
Constructors
Instanziiert ein PackedDecimal.
Instanziiert ein PackedDecimal.
Falls man eine BigDecimal in eine PackedDecimal wandeln will, kann man diesen Konstruktor hier verwenden. Besser ist es allerdings, wenn man dazu .valueOf verwendet.
Properties
Da sich mit PackedDecimal auch Telefonnummer und andere Zahlenkombinationen abspeichern lassen, die im eigentlichen Sinn keine Zahl darstellen, kann man ueber diese Methode abfragen, ob eine Zahl abespeichdert wurde oder nicht.
Functions
Summiert den uebergebenen Summanden und liefert als Ergebnis eine neue PackedDecimal zurueck
Vergleicht die andere Zahl mit der aktuellen Zahl.
Dividiert den uebergebenen Operanden und liefert als Ergebnis eine neue PackedDecimal zurueck
Verschiebt den Dezimalpunkt um n Stellen nach links.
Verschiebt den Dezimalpunkt um n Stellen nach rechts.
Multipliziert den uebergebenen Operanden und liefert als Ergebnis eine neue PackedDecimal zurueck
Mulitpliziert den uebergebenen Operanden und liefert als Ergebnis eine neue PackedDecimal zurueck
Setzt die Anzahl der Nachkommastellen.
Subtrahiert den uebergebenen Operanden und liefert als Ergebnis eine neue PackedDecimal zurueck
Liefert die gepackte Dezimalzahl wieder als BigDecimal zurueck.