Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
Decimalnie jest typem danych zmiennoprzecinkowych. StrukturaDecimalzawiera 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 tymDecimalliczby mają bardziej precyzyjną reprezentację w pamięci niż typy zmiennoprzecinkowe (SingleiDouble).Wydajność. Typ
Decimaldanych jest najwolniejszy ze wszystkich typów liczbowych. Przed wybraniem typu danych należy rozważyć znaczenie dokładności względem wydajności.Poszerzenie. Typ danych
Decimalmożna przekonwertować naSinglelubDoublebez napotkania błędu System.OverflowException. Jednak ta konwersja może spowodować utratę dokładności, ponieważSingleiDoublepriorytetowo traktują zmieszczenie większych wartości nad zachowanie precyzji.
Dim decimalValue As Decimal = 1234567890123456789012345D
Dim doubleValue As Double = CDbl(decimalValue)
Console.WriteLine("Decimal value: " & decimalValue)
Console.WriteLine("Double value: " & doubleValue)
Dane wyjściowe powyższego przykładu pokazują, że wartość dziesiętna zachowuje pełną precyzję, podczas gdy podwójna wartość traci precyzję ze względu na ograniczenia typu danych Double.
Decimal value: 1234567890123456789012345
Double value: 1.23456789012346E+24
Końcowe zera. Visual Basic nie przechowuje końcowych zer w
Decimalliterału. Jednak zmiennaDecimalzachowuje 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
MsgBoxz poprzedniego przykładu są następujące:d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4Wpisz znaki. Dołączanie znaku
Dtypu literału do literału wymusza jegoDecimaltyp danych. Dołączanie znaku@typu identyfikatora do dowolnego identyfikatora wymusza jego wartość .DecimalTyp 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 , Longnie można go przypisać do zmiennej Decimal .
W przypadku bigDec3elementu znak D typu literału rozwiązuje problem, zmuszając kompilatora do interpretacji literału jako Decimal zamiast jako Long.