Dela via


Decimaldatatyp (Visual Basic)

Innehåller signerade 128-bitarsvärden (16 byte) som representerar 96-bitars heltalsnummer (12 byte) som skalas med en variabel effekt på 10. Skalningsfaktorn anger antalet siffror till höger om decimaltecknet. det varierar från 0 till 28. Med en skala på 0 (inga decimaler) är det största möjliga värdet +/-79 228 162 514 264 337 593,5 43 950 335 (+/-7.9228162514264337593543950335E+28). Med 28 decimaler är det största värdet +/-7,9228162514264337593543950335, och det minsta nonzero-värdet är +/-0,00000000000000000000000001 (+/-1E-28).

Kommentarer

Datatypen Decimal innehåller det största antalet signifikanta siffror för ett tal. Den stöder upp till 29 signifikanta siffror och kan representera värden över 7,9228 x 10^28. Den är särskilt lämplig för beräkningar, till exempel finansiella, som kräver ett stort antal siffror men som inte kan tolerera avrundningsfel.

Standardvärdet Decimal för är 0.

Programmeringstips

  • Precision. Decimal är inte en flyttalsdatatyp. Strukturen Decimal innehåller ett binärt heltalsvärde, tillsammans med en teckenbit och en heltalsskalningsfaktor som anger vilken del av värdet som är ett decimaltal. Decimal Därför har tal en mer exakt representation i minnet än flyttalstyper (Single och Double).

  • Prestanda. Datatypen Decimal är den långsammaste av alla numeriska typer. Du bör väga vikten av precision mot prestanda innan du väljer en datatyp.

  • Breddning. Datatypen Decimal vidgas till Single eller Double. Det innebär att du kan konvertera Decimal till någon av dessa typer utan att det uppstår något System.OverflowException fel.

  • Avslutande nollor. Visual Basic lagrar inte avslutande nollor i en Decimal literal. En variabel bevarar dock Decimal eventuella avslutande nollor som hämtas beräkningsmässigt. I följande exempel visas detta.

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

    Utdata från MsgBox i föregående exempel är följande:

    d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
    
  • Skriv tecken. Om du lägger till teckentypen D literal till en literal tvingar det till Decimal datatypen. Om du lägger till tecknet @ för identifierartyp till en identifierare tvingar det till Decimal.

  • Ramverkstyp. Motsvarande typ i .NET Framework är System.Decimal strukturen.

Intervall

Du kan behöva använda D typtecknet för att tilldela ett stort värde till en Decimal variabel eller konstant. Det här kravet beror på att kompilatorn tolkar en literal som Long om inte ett literaltyptecken följer literalen, vilket visas i följande exempel.

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

Deklarationen för bigDec1 skapar inte ett spill eftersom värdet som har tilldelats det ligger inom intervallet för Long. Värdet Long kan tilldelas till variabeln Decimal .

Deklarationen för bigDec2 genererar ett spillfel eftersom värdet som har tilldelats till det är för stort för Long. Eftersom den numeriska literalen inte först kan tolkas som en Longkan den inte tilldelas till variabeln Decimal .

För bigDec3löser literaltypstecknet D problemet genom att tvinga kompilatorn att tolka literalen som en Decimal i stället för som en Long.

Se även