Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.
Decimalnon è un tipo di dati a virgola mobile. La strutturaDecimalcontiene 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 numeriDecimalhanno una rappresentazione più precisa in memoria rispetto ai tipi a virgola mobile (SingleeDouble).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
Decimalpuò essere convertito inSingleoDoublesenza riscontrare un errore di System.OverflowException. Tuttavia, questa conversione può comportare perdita di precisione, poichéSingleeDoubleprioritizzano accomodare valori più grandi rispetto a preservare la precisione.
Dim decimalValue As Decimal = 1234567890123456789012345D
Dim doubleValue As Double = CDbl(decimalValue)
Console.WriteLine("Decimal value: " & decimalValue)
Console.WriteLine("Double value: " & doubleValue)
L'output dell'esempio precedente mostra che il valore decimale mantiene la precisione completa, mentre il valore Double perde la precisione a causa delle limitazioni del tipo di dati Double.
Decimal value: 1234567890123456789012345
Double value: 1.23456789012346E+24
Zro finali. Visual Basic non archivia gli zeri finali in un valore letterale
Decimal. Tuttavia, una variabileDecimalmantiene 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
MsgBoxnell'esempio precedente è il seguente:d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4Caratteri tipo. Aggiungendo il carattere di tipo letterale
Da 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.