Sdílet prostřednictvím


Decimal – datový typ (Visual Basic)

Obsahuje 128bitové 128bitové (16bajtů) hodnoty představující 96bitová (12bajtů) celočíselná čísla škálovaná proměnným výkonem 10. Koeficient měřítka určuje počet číslic napravo od desetinné čárky; pohybuje od 0 do 28. S měřítkem 0 (bez desetinných míst) je největší možná hodnota +/-79 228 162 514 264 337 593 5 43 950 335 (+/-7,9228162514264337593543950335E+28). S 28 desetinnými místy je největší hodnota +/-7,922816251426437593543950335 a nejmenší nenulová hodnota je +/-0,000000000000000000000000000000 (+/-1E-28).

Poznámky

Datový Decimal typ poskytuje největší počet významných číslic pro číslo. Podporuje až 29 platných číslic a může představovat hodnoty nad 7,9228 x 10^28. Je vhodný zejména pro výpočty, jako je finanční, které vyžadují velký počet číslic, ale nemohou tolerovat chyby zaokrouhlení.

Výchozí hodnota Decimal je 0.

Tipy k programování

  • Přesnost. Decimal není datový typ s plovoucí desetinou čárkou. Struktura Decimal obsahuje binární celočíselnou hodnotu spolu s bitem znaménka a celočíselnou škálovací hodnotou, která určuje, jaká část hodnoty je desetinná desetinná čárka. Z tohoto důvodu Decimal mají čísla přesnější reprezentaci v paměti než typy s plovoucí desetinou čárkou (Single a Double).

  • Výkon. Datový Decimal typ je nejpomalejší ze všech číselných typů. Před výběrem datového typu byste měli zvážit důležitost přesnosti proti výkonu.

  • Rozšiřování. Datový typ Decimal lze převést na Single nebo Double, aniž by došlo k chybě System.OverflowException. Tento převod však může vést ke ztrátě přesnosti , protože Single a Double upřednostňují větší hodnoty před zachováním přesnosti.

Dim decimalValue As Decimal = 1234567890123456789012345D
Dim doubleValue As Double = CDbl(decimalValue)

Console.WriteLine("Decimal value: " & decimalValue)
Console.WriteLine("Double value: " & doubleValue)

Výstup předchozího příkladu ukazuje, že Desetinná hodnota zachovává úplnou přesnost, zatímco Dvojitá hodnota ztratí přesnost z důvodu omezení datového typu Double.

 Decimal value: 1234567890123456789012345
 Double value: 1.23456789012346E+24
  • Koncové nuly. Visual Basic neukládá koncové nuly v literálu Decimal . Proměnná Decimal však zachovává všechny koncové nuly získané výpočetně. Toto dokládá následující příklad.

    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))
    

    Výstup MsgBox v předchozím příkladu je následující:

    d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
    
  • Zadejte znaky. Když k literálu připojíte znak D literálu, vynutíte ho k datovému Decimal typu. Připojení znaku @ typu identifikátoru k libovolnému identifikátoru ho vynutí .Decimal

  • Typ architektury. Odpovídající typ v rozhraní .NET Framework je System.Decimal struktura.

Rozsah

K přiřazení velké hodnoty D proměnné nebo konstanty může být potřeba použít Decimal znak typu. Tento požadavek spočívá v tom, že kompilátor interpretuje literál, jako Long kdyby znak literálového typu neslouží literálu, jak ukazuje následující příklad.

Dim bigDec1 As Decimal = 9223372036854775807   ' No overflow.
Dim bigDec2 As Decimal = 9223372036854775808   ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D  ' No overflow.

Deklarace pro bigDec1 negeneruje přetečení, protože hodnota, která je k ní přiřazena, spadá do rozsahu pro Long. Hodnotu Long lze přiřadit proměnné Decimal .

Deklarace pro bigDec2 vygeneruje chybu přetečení, protože hodnota, která je k ní přiřazena, je příliš velká pro Long. Vzhledem k tomu, že číselný literál nelze nejprve interpretovat jako argument Long, nelze ho Decimal přiřadit k proměnné.

Pro bigDec3, literál typ znak D řeší problém vynucením kompilátoru interpretovat literál jako místo Decimal jako .Long

Viz také