Tipo di dati Decimal (Visual Basic)
Contiene valori Signed a 128 bit (16 byte) che rappresentano numeri di tipo Integer a 96 bit (12 byte) scalati in base a una potenza variabile di 10. Il fattore di ridimensionamento specifica il numero di cifre a destra del separatore decimale; varia da 0 a 28. Con una scala pari a 0 (nessuna posizione decimale), il valore massimo possibile è +/-79.228.162.514.264.337.593.5 43.950.335 (+/-7.9228162514264337593543950335E+28). Con 28 posizioni decimali, il valore più grande è +/-7.9228162514264337593543950335 e il valore diverso da zero più piccolo è +/-0.0000000000000000000000000001 (+/-1E-28).
Osservazioni:
Il tipo di dati Decimal
fornisce il maggior numero di cifre significative per un numero. Supporta fino a 29 cifre significative e può rappresentare valori superiori a 7,9228 x 10^28. È particolarmente adatto per i calcoli, ad esempio quelli finanziari, che richiedono un numero elevato di cifre, ma non possono tollerare errori di arrotondamento.
Il valore predefinito di Decimal
è 0.
suggerimenti per la programmazione
Precisione.
Decimal
non è un tipo di dati a virgola mobile. La strutturaDecimal
contiene un valore intero binario, insieme a un bit più significativo e a un fattore di ridimensionamento integer che specifica quale parte del valore è una frazione decimale. Per questo motivo, i numeriDecimal
hanno una rappresentazione più precisa in memoria rispetto ai tipi a virgola mobile (Single
eDouble
).Prestazioni. Il tipo di dati
Decimal
è il più lento di tutti i tipi numerici. È consigliabile valutare l'importanza della precisione rispetto alle prestazioni prima di scegliere un tipo di dati.Ampliamento. Il tipo di dati
Decimal
può ampliarsi nel tipoSingle
oDouble
. È pertanto possibile convertireDecimal
in uno di questi tipi senza generare un errore System.OverflowException.Zro finali. Visual Basic non archivia gli zeri finali in un valore letterale
Decimal
. Tuttavia, una variabileDecimal
mantiene tutti gli zeri finali acquisiti in modo computazionale. Ciò è illustrato nell'esempio seguente.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))
L'output di
MsgBox
nell'esempio precedente è il seguente:d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
Caratteri tipo. Aggiungendo il carattere di tipo letterale
D
a un valore letterale, se ne determina la conversione nel tipo di datiDecimal
. Aggiungendo il carattere identificatore di tipo@
a qualsiasi identificatore, se ne determina la conversione al tipo di datiDecimal
.Tipo di framework. Il tipo corrispondente in .NET Framework è la struttura System.Decimal.
Intervallo
Potrebbe essere necessario usare il carattere di tipo D
per assegnare un valore di grandi dimensioni a una variabile Decimal
o a una costante. Questo requisito è dovuto al fatto che il compilatore interpreta un valore letterale come Long
a meno che un carattere di tipo letterale non segua il valore letterale, come illustrato nell'esempio seguente.
Dim bigDec1 As Decimal = 9223372036854775807 ' No overflow.
Dim bigDec2 As Decimal = 9223372036854775808 ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D ' No overflow.
La dichiarazione per bigDec1
non produce un overflow perché il valore assegnato è compreso nell'intervallo per Long
. Il valore Long
può essere assegnato alla variabile Decimal
.
La dichiarazione per bigDec2
genera un errore di overflow perché il valore assegnato è troppo grande per Long
. Poiché il valore letterale numerico non può essere prima interpretato come Long
, non può essere assegnato alla variabile Decimal
.
Per bigDec3
, il carattere di tipo letterale D
risolve il problema forzando il compilatore a interpretare il valore letterale come Decimal
anziché come Long
.