Condividi tramite


Tipo di dati Decimal (Visual Basic)

Contiene valori a 128 bit (16 byte) con segno che rappresentano valore integer di 96 bit (12 byte) scalati in base a una potenza variabile di 10. Il fattore di scala specifica il numero di cifre a destra del separatore decimale, da 0 a 28. Con una scala pari a 0 (nessuna posizione decimale), il più alto valore 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 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. Questa condizione è illustrata nell'esempio che segue.

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

Intervallo

Per assegnare un valore alto a una costante o variabile Decimal, può essere necessario utilizzare il tipo di carattere D. Questo requisito perché il compilatore interpreta un valore letterale come Long a meno che un carattere di tipo letterale segua il valore letterale, come illustrato di seguito.

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 fa parte dell'intervallo per Long. Il valore Long può essere assegnato alla variabile Decimal.

La dichiarazione per bigDec2 generato un errore di overflow perché il valore assegnato è troppo grande per Long. Poiché il valore letterale numerico non può essere dapprima interpretato come Long, non può essere assegnato alla variabile Decimal.

Per bigDec3, il carattere di tipo letterale D risolve il problema forzando il compilatore per interpretare il valore letterale come Decimal anziché come Long.

Vedere anche

Riferimenti

Riepilogo dei tipi di dati (Visual Basic)

Decimal

Decimal.#ctor

Tipo di dati Single (Visual Basic)

Tipo di dati Double (Visual Basic)

Funzioni di conversione del tipo (Visual Basic)

Riepilogo della conversione (Visual Basic)

Math.Round

Concetti

Utilizzo efficiente dei tipi di dati (Visual Basic)