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 kan konverteras till Single eller Double utan att det uppstår ett System.OverflowException fel. Den här konverteringen kan dock leda till förlust av precision, eftersom Single och Double prioritera att ta emot större värden framför att bevara precisionen.

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

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

Utdata från föregående exempel visar att decimalvärdet behåller full precision, medan Double-värdet förlorar precision på grund av begränsningarna i Double datatypen.

 Decimal value: 1234567890123456789012345
 Double value: 1.23456789012346E+24
  • 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