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. DieDecimal
-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 TypDecimal
eine präzisere Darstellung im Arbeitsspeicher als Gleitkommatypen (Single
undDouble
).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 zuSingle
oderDouble
erweitert. Das bedeutet, dass SieDecimal
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. EineDecimal
-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 derDecimal
-Datentyp erzwungen. Durch Anhängen des Typkennzeichens@
an einen beliebigen Bezeichner wird für diesen ebenfalls derDecimal
-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.