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. StrukturenDecimal
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
ochDouble
).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 tillSingle
ellerDouble
. Det innebär att du kan konverteraDecimal
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 dockDecimal
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 tillDecimal
datatypen. Om du lägger till tecknet@
för identifierartyp till en identifierare tvingar det tillDecimal
.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 Long
kan den inte tilldelas till variabeln Decimal
.
För bigDec3
löser literaltypstecknet D
problemet genom att tvinga kompilatorn att tolka literalen som en Decimal
i stället för som en Long
.