Decimal — Typ danych (Visual Basic)
Zawiera podpisane 128-bitowe (16-bajtowe) wartości reprezentujące 96-bitowe (12-bajtowe) liczby całkowite skalowane przez zmienną moc 10. Współczynnik skalowania określa liczbę cyfr po prawej stronie przecinka dziesiętnego; waha się od 0 do 28. Przy skali 0 (bez miejsc dziesiętnych), największą możliwą wartością jest +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9228162514264337593543950335E+28). W przypadku 28 miejsc dziesiętnych największa wartość to +/-7.922816251426437593543950335, a najmniejsza wartość niezerowa to +/-0,000000000000000000000000001 (+/-1E-28).
Uwagi
Typ Decimal
danych zapewnia największą liczbę cyfr znaczących dla liczby. Obsługuje maksymalnie 29 cyfr znaczących i może reprezentować wartości przekraczające 7,9228 x 10^28. Szczególnie nadaje się do obliczeń, takich jak finanse, które wymagają dużej liczby cyfr, ale nie mogą tolerować błędów zaokrąglania.
Wartość domyślna to Decimal
0.
porady dotyczące programowania
Precyzja.
Decimal
nie jest typem danych zmiennoprzecinkowych. StrukturaDecimal
zawiera binarną wartość całkowitą wraz z bitem znaku i współczynnikiem skalowania liczby całkowitej określającym, jaka część wartości jest ułamkiem dziesiętnym. W związku z tymDecimal
liczby mają bardziej precyzyjną reprezentację w pamięci niż typy zmiennoprzecinkowe (Single
iDouble
).Wydajność. Typ
Decimal
danych jest najwolniejszy ze wszystkich typów liczbowych. Przed wybraniem typu danych należy rozważyć znaczenie dokładności względem wydajności.Poszerzenie.
Decimal
Typ danych rozszerza się doSingle
lubDouble
. Oznacza to, że można przekonwertowaćDecimal
na jeden z tych typów bez napotkania błędu System.OverflowException .Końcowe zera. Visual Basic nie przechowuje końcowych zer w
Decimal
literału. Jednak zmiennaDecimal
zachowuje wszystkie końcowe zera uzyskane obliczenia. Ilustruje to poniższy przykład.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))
Dane wyjściowe
MsgBox
z poprzedniego przykładu są następujące:d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
Wpisz znaki. Dołączanie znaku
D
typu literału do literału wymusza jegoDecimal
typ danych. Dołączanie znaku@
typu identyfikatora do dowolnego identyfikatora wymusza jego wartość .Decimal
Typ struktury. Odpowiedni typ w programie .NET Framework jest strukturą System.Decimal .
Zakres
Może być konieczne użycie D
znaku typu w celu przypisania dużej wartości do zmiennej lub stałej Decimal
. To wymaganie jest spowodowane tym, że kompilator interpretuje literał jako Long
, chyba że znak typu literału jest zgodny z literałem, jak pokazano w poniższym przykładzie.
Dim bigDec1 As Decimal = 9223372036854775807 ' No overflow.
Dim bigDec2 As Decimal = 9223372036854775808 ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D ' No overflow.
Deklaracja dla bigDec1
elementu nie generuje przepełnienia, ponieważ wartość przypisana do niej mieści się w zakresie .Long
Wartość Long
można przypisać do zmiennej Decimal
.
Deklaracja dla bigDec2
generuje błąd przepełnienia, ponieważ wartość przypisana do niej jest zbyt duża dla elementu Long
. Ponieważ literał liczbowy nie może być najpierw interpretowany jako , Long
nie można go przypisać do zmiennej Decimal
.
W przypadku bigDec3
elementu znak D
typu literału rozwiązuje problem, zmuszając kompilatora do interpretacji literału jako Decimal
zamiast jako Long
.