PackedDecimal

open class PackedDecimal @JvmOverloads constructor(zahl: String, validator: KSimpleValidator<String> = VALIDATOR) : AbstractNumber, KFachwert

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

Link copied to clipboard
constructor(zahl: Int)
constructor(zahl: Long)

Instanziiert ein PackedDecimal.

constructor(zahl: Double)

Instanziiert ein PackedDecimal.

constructor(zahl: BigDecimal)

Falls man eine BigDecimal in eine PackedDecimal wandeln will, kann man diesen Konstruktor hier verwenden. Besser ist es allerdings, wenn man dazu .valueOf verwendet.

constructor(zahl: String, validator: KSimpleValidator<String> = VALIDATOR)

Types

Link copied to clipboard
object Companion

Properties

Link copied to clipboard

Liefert true zurueck, wenn die Zahl als Bruch angegeben ist.

Link copied to clipboard

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

Link copied to clipboard
fun add(summand: Bruch): PackedDecimal

Summiert den uebergebenen Summanden und liefert als Ergebnis eine neue PackedDecimal zurueck

Link copied to clipboard
open operator override fun compareTo(other: AbstractNumber): Int
operator fun compareTo(other: PackedDecimal): Int

Vergleicht die andere Zahl mit der aktuellen Zahl.

Link copied to clipboard
fun divide(operand: Bruch): PackedDecimal

Dividiert den uebergebenen Operanden und liefert als Ergebnis eine neue PackedDecimal zurueck

Link copied to clipboard
open operator override fun equals(other: Any?): Boolean

Beim Vergleich zweier PackedDecimals werden auch fuehrende Nullen beruecksichtigt. D.h. '711' und '0711' werden als unterschiedlich betrachtet.

Link copied to clipboard
open override fun hashCode(): Int
Link copied to clipboard
open override fun isValid(): Boolean
Link copied to clipboard

Verschiebt den Dezimalpunkt um n Stellen nach links.

Link copied to clipboard

Verschiebt den Dezimalpunkt um n Stellen nach rechts.

Link copied to clipboard

Multipliziert den uebergebenen Operanden und liefert als Ergebnis eine neue PackedDecimal zurueck

Mulitpliziert den uebergebenen Operanden und liefert als Ergebnis eine neue PackedDecimal zurueck

Link copied to clipboard

Setzt die Anzahl der Nachkommastellen.

Link copied to clipboard

Subtrahiert den uebergebenen Operanden und liefert als Ergebnis eine neue PackedDecimal zurueck

Link copied to clipboard
open override fun toBigDecimal(): BigDecimal

Liefert die gepackte Dezimalzahl wieder als BigDecimal zurueck.

Link copied to clipboard
fun toBruch(): Bruch

Liefert die Zahl als Bruch zurueck.

Link copied to clipboard
open override fun toByte(): Byte

Liefert die Zahl als ein Byte zurueck.

Link copied to clipboard
open override fun toChar(): Char

Liefert die Zahl als ein Char zurueck.

Link copied to clipboard
open override fun toDouble(): Double

Liefert die Zahl als ein double zurueck.

Link copied to clipboard
open override fun toFloat(): Float

Liefert die Zahl als ein float zurueck.

Link copied to clipboard
open override fun toInt(): Int

Liefert die Zahl als ein int (gerundet) zurueck.

Link copied to clipboard
open override fun toLong(): Long

Liefert die Zahl als ein long (gerundet) zurueck.

Link copied to clipboard
open override fun toMap(): Map<String, Any>
Link copied to clipboard
open override fun toShort(): Short

Liefert die Zahl als ein Short zurueck.

Link copied to clipboard
open override fun toString(): String