Condividi tramite


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 struttura Decimal 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 numeri Decimal hanno una rappresentazione più precisa in memoria rispetto ai tipi a virgola mobile (Single e Double).

  • 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 tipo Single o Double. È pertanto possibile convertire Decimal 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 variabile Decimal 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 dati Decimal. Aggiungendo il carattere identificatore di tipo @ a qualsiasi identificatore, se ne determina la conversione al tipo di dati Decimal.

  • 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.

Vedi anche