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. 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 danych Decimal można przekonwertować na Single lub Double bez napotkania błędu System.OverflowException. Jednak ta konwersja może spowodować utratę dokładności, ponieważ Single i Double priorytetowo 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.
Końcowe zera. Visual Basic nie przechowuje końcowych zer w Decimal literału. Jednak zmienna Decimal zachowuje wszystkie końcowe zera uzyskane obliczenia. Ilustruje to poniższy przykład.
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łą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 , 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.
Źródło tej zawartości można znaleźć w witrynie GitHub, gdzie można również tworzyć i przeglądać problemy i żądania ściągnięcia. Więcej informacji znajdziesz w naszym przewodniku dla współtwórców.
Opinia o produkcie .NET
.NET to projekt typu open source. Wybierz link, aby przekazać opinię:
Dołącz do serii meetup, aby tworzyć skalowalne rozwiązania sztucznej inteligencji oparte na rzeczywistych przypadkach użycia z innymi deweloperami i ekspertami.