Decimal-Datentyp (Visual Basic)

Speichert signierte 128-Bit-Werte (16-Byte-Werte), die ganze 96-Bit-Zahlen (12-Byte-Zahlen) darstellen, die mit einer variablen Potenz von 10 skaliert sind. Der Skalierungsfaktor gibt die Anzahl von Stellen rechts vom Dezimalzeichen an und reicht von 0 bis 28. Bei der Skalierung 0 (keine Dezimalstellen) ist der größtmögliche Wert +/-79.228.162.514.264.337.593.543.950.335 (+/-7,9228162514264337593543950335E+28). Bei 28 Dezimalstellen ist der größte Wert +/-7,9228162514264337593543950335, und der kleinste Wert (der nicht null ist) ist +/-0,0000000000000000000000000001 (+/-1E-28).

Bemerkungen

Der Decimal-Datentyp stellt die größte Anzahl signifikanter Stellen für eine Zahl bereit. Er unterstützt bis zu 29 signifikante Stellen und kann Werte darstellen, die über 7,9228 · 10^28 hinausgehen. Er eignet sich besonders für Berechnungen (beispielsweise im Finanzbereich), die sehr viele Stellen und keine Rundungsfehler erfordern.

Der Standardwert von Decimal lautet 0.

Programmiertipps

  • Genauigkeit. Decimal ist kein Gleitkommadatentyp. Die Decimal-Struktur enthält einen ganzzahligen Binärwert, zusammen mit einem Vorzeichenbit und einem ganzzahligen Skalierungsfaktor, der angibt, welcher Teil des Werts ein Dezimalbruch ist. Daher haben Zahlen vom Typ Decimal eine präzisere Darstellung im Arbeitsspeicher als Gleitkommatypen (Single und Double).

  • Leistung. Der Decimal-Datentyp ist der langsamste aller numerischen Typen. Wägen Sie die Wichtigkeit von Genauigkeit und Leistung gegeneinander ab, bevor Sie sich für einen Datentyp entscheiden.

  • Erweiterung. Der Decimal-Datentyp wird zu Single oder Double erweitert. Das bedeutet, dass Sie Decimal in einen dieser Typen konvertieren können, ohne dass ein System.OverflowException-Fehler auftritt.

  • Nachfolgende Nullen. Visual Basic speichert keine nachfolgenden Nullen in einem Decimal-Literal. Eine Decimal-Variable speichert jedoch alle nachfolgenden Nullen, die rechnerisch erfasst werden. Dies wird anhand des folgenden Beispiels veranschaulicht.

    Dim d1, d2, d3, d4 As Decimal
    d1 = 2.375D
    d2 = 1.625D
    d3 = d1 + d2
    d4 = 4.000D
    MsgBox("d1 = " & CStr(d1) & ", d2 = " & CStr(d2) &
          ", d3 = " & CStr(d3) & ", d4 = " & CStr(d4))
    

    Die Ausgabe von MsgBox im vorherigen Beispiel lautet wie folgt:

    d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
    
  • Typzeichen. Durch Anhängen des Literaltypzeichens D an ein Literal wird der Decimal-Datentyp erzwungen. Durch Anhängen des Typkennzeichens @ an einen beliebigen Bezeichner wird für diesen ebenfalls der Decimal-Datentyp erzwungen.

  • Framework-Typ. Der entsprechende Typ in .NET Framework ist die System.Decimal-Struktur.

Bereich

Möglicherweise müssen Sie das Typzeichen D verwenden, um einer Decimal-Variablen oder -Konstanten einen großen Wert zuzuweisen. Dies ist erforderlich, weil der Compiler ein Literal als Long interpretiert, es sei denn, auf das Literal folgt ein Literaltypzeichen, wie im folgenden Beispiel zu sehen:

Dim bigDec1 As Decimal = 9223372036854775807   ' No overflow.
Dim bigDec2 As Decimal = 9223372036854775808   ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D  ' No overflow.

Die Deklaration für bigDec1 führt zu keinem Überlauf, da der ihr zugewiesene Wert innerhalb des Bereichs für Long liegt. Der Long-Wert kann der Decimal-Variablen zugewiesen werden.

Die Deklaration für bigDec2 führt zu einem Überlauffehler, da der zugewiesene Wert zu groß für Long ist. Da das numerische Literal nicht erst als Long interpretiert werden kann, kann es der Decimal-Variablen nicht zugewiesen werden.

Für bigDec3 löst das Literaltypzeichen D das Problem, denn es bewirkt, dass der Compiler das Literal als Decimal und nicht als Long interpretiert.

Siehe auch