Share via


Tipo di dati Decimal (Visual Basic)

Aggiornamento: novembre 2007

Contiene valori con segno a 128 bit (16 byte) che rappresentano numeri integer a 96 bit (12 byte) scalati in base a una potenza variabile di 10. l fattore di scala consente di specificare il numero di cifre a destra della virgola decimale ed è compreso tra 0 e 28. Con una scala pari a 0 (nessuna posizione decimale), il più alto valore di destinazione possibile è +/-79.228.162.514.264.337.593.543.950.335 (+/-7,9228162514264337593543950335E+28). Con 28 posizioni decimali, il più alto valore possibile è +/-7,9228162514264337593543950335, mentre il valore più piccolo diverso da zero è +/-0,0000000000000000000000000001 (+/-1E-28).

Note

Il tipo di dati Decimal fornisce il numero più elevato di cifre possibili 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 finanziari, che richiedono un numero elevato di cifre ma non sono in grado di 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 integer binario nonché un bit di segno e un fattore di scala integer che specifica quale parte del valore è una frazione decimale. Per questa ragione, i numeri Decimal hanno una rappresentazione in memoria più precisa rispetto ai tipi a virgola mobile (Single e Double).

  • Prestazioni. Il tipo di dati Decimal è il più lento di tutti i tipi numerici. Prima di scegliere un tipo di dati è opportuno valutare l'importanza della precisione rispetto alle prestazioni.

  • Conversione verso un tipo di dati più grande. Il tipo di dati Decimal viene convertito verso il tipo più grande Single o Double. È pertanto possibile convertire Decimal in uno di questi tipi senza generare un errore System.OverflowException.

  • Zeri finali. In Visual Basic gli zeri finali non vengono archiviati in un valore letterale Decimal. Una variabile Decimal, tuttavia, conserva gli zeri finali acquisiti a seguito di un calcolo. Nell'esempio riportato di seguito viene illustrata questa situazione.

    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))
    

    Il risultato di MsgBox dell'esempio precedente è riportato di seguito:

    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 Framework. Il tipo corrispondente in .NET Framework è la struttura System.Decimal.

Intervallo

Per assegnare un valore alto a una costante o variabile Decimal, può essere necessario utilizzare il tipo di carattere D. Questa condizione è illustrata nell'esempio che segue.

Dim bigDec1 As Decimal = 9223372036854775807   ' No overflow.
Dim bigDec2 As Decimal = 9223372036854775808   ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D  ' No overflow.

Il compilatore interpreta un valore letterale come Long, a meno che non sia seguito da un carattere di tipo letterale. La dichiarazione relativa a bigDec1 non produce un overflow in quanto il rispettivo valore è compreso nell'intervallo relativo a Long. Il valore di bigDec2, tuttavia, è troppo elevato per Long, pertanto il compilatore genera un errore. Il carattere di tipo letterale D risolve il problema relativo a bigDec3 inducendo il compilatore a interpretare il valore letterale come Decimal.

Vedere anche

Concetti

Utilizzo efficiente dei tipi di dati

Riferimenti

Riepilogo dei tipi di dati (Visual Basic)

System.Decimal

Decimal.Decimal

Tipo di dati Single (Visual Basic)

Tipo di dati Double (Visual Basic)

Funzioni di conversione del tipo

Riepilogo della conversione