Decimal — Typ danych (Visual Basic)

Przechowuje 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 punktu 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,593, 543,950,335 (+/-7.92281625142643759354395035E+28). W przypadku 28 miejsc dziesiętnych największa wartość to +/-7.922816251426433759354395335, a najmniejsza wartość niezerowa to +/-0,000000000000000000000000000001 (+/-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 dla programistów

  • Precyzji. Decimal nie jest typem danych zmiennoprzecinkowych. Struktura Decimal 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 tym Decimal liczby mają bardziej precyzyjną reprezentację w pamięci niż typy zmiennoprzecinkowe (Single i Double).

  • 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. Typ Decimal danych rozszerza się na Single lub Double. 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. Zmienna Decimal zachowuje jednak wszelkie końcowe zera pozyskane 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 jego Decimal typ danych. Dołączenie znaku @ typu identyfikatora do dowolnego identyfikatora wymusza jego wartość Decimal.

  • Typ struktury. Odpowiedni typ w .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ł, chyba Long ż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 dla Longelementu . Wartość Long można przypisać do zmiennej Decimal .

Deklaracja dla bigDec2 generuje błąd przepełnienia, ponieważ wartość przypisana do niego jest zbyt duża dla Longelementu . Ponieważ literał liczbowy nie może być najpierw interpretowany jako Long, nie można przypisać go do zmiennej Decimal .

W przypadku bigDec3metody znak D typu literału rozwiązuje problem, zmuszając kompilator do interpretowania literału jako Decimal zamiast jako Long.

Zobacz też