Tipo di dati Decimal (Visual Basic)Decimal Data Type (Visual Basic)

Include valori con segno a 128 bit (16 byte) che rappresentano numeri interi a 96 bit (12 byte) ridimensionati in base a una potenza variabile di 10.Holds signed 128-bit (16-byte) values representing 96-bit (12-byte) integer numbers scaled by a variable power of 10. Il fattore di scala specifica il numero di cifre a destra del separatore decimale. l'intervallo è compreso tra 0 e 28.The scaling factor specifies the number of digits to the right of the decimal point; it ranges from 0 through 28. Con una scala pari a 0 (senza posizioni decimali), il valore massimo possibile è +/-79.228.162.514.264.337.593.543.950.335 (+/-7.9228162514264337593543950335E + 28).With a scale of 0 (no decimal places), the largest possible value is +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9228162514264337593543950335E+28). Con 28 cifre decimali, il valore più grande è +/-7.9228162514264337593543950335 e il valore diverso da zero è +/-0,0000000000000000000000000001 (+/-1E-28).With 28 decimal places, the largest value is +/-7.9228162514264337593543950335, and the smallest nonzero value is +/-0.0000000000000000000000000001 (+/-1E-28).

NoteRemarks

Il tipo di dati Decimal fornisce il maggior numero di cifre significative per un numero.The Decimal data type provides the greatest number of significant digits for a number. Supporta fino a 29 cifre significative e può rappresentare valori superiori a 7,9228 x 10 ^ 28.It supports up to 29 significant digits and can represent values in excess of 7.9228 x 10^28. È particolarmente adatto per i calcoli, ad esempio Financial, che richiedono un numero elevato di cifre ma non tollerano errori di arrotondamento.It is particularly suitable for calculations, such as financial, that require a large number of digits but cannot tolerate rounding errors.

Il valore predefinito di Decimal è 0.The default value of Decimal is 0.

Suggerimenti per la programmazioneProgramming Tips

  • Precisione.Precision. Decimal non è un tipo di dati a virgola mobile.Decimal is not a floating-point data type. La struttura Decimal include un valore integer binario, insieme a un bit di segno e a un fattore di scala integer che specifica quale parte del valore è una frazione decimale.The Decimal structure holds a binary integer value, together with a sign bit and an integer scaling factor that specifies what portion of the value is a decimal fraction. Per questo motivo, i numeri Decimal hanno una rappresentazione più precisa in memoria rispetto ai tipi a virgola mobile (Single e Double).Because of this, Decimal numbers have a more precise representation in memory than floating-point types (Single and Double).

  • Prestazioni.Performance. Il tipo di dati Decimal è il più lento di tutti i tipi numerici.The Decimal data type is the slowest of all the numeric types. Prima di scegliere un tipo di dati, è necessario valutare l'importanza della precisione rispetto alle prestazioni.You should weigh the importance of precision against performance before choosing a data type.

  • Conversioni.Widening. Il tipo di dati Decimal viene ampliato a Single o Double.The Decimal data type widens to Single or Double. Ciò significa che è possibile convertire Decimal in uno di questi tipi senza riscontrare un errore System.OverflowException.This means you can convert Decimal to either of these types without encountering a System.OverflowException error.

  • Zeri finali.Trailing Zeros. Visual Basic non archivia gli zeri finali in un valore letterale Decimal.Visual Basic does not store trailing zeros in a Decimal literal. Una variabile Decimal, tuttavia, conserva gli zeri finali acquisiti in modo computazionale.However, a Decimal variable preserves any trailing zeros acquired computationally. Questa condizione è illustrata nell'esempio seguente.The following example illustrates this.

    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:The output of MsgBox in the preceding example is as follows:

    d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
    
  • Digitare i caratteri.Type Characters. Aggiungendo il carattere di tipo letterale D a un valore letterale, se ne determina la conversione nel tipo di dati Decimal.Appending the literal type character D to a literal forces it to the Decimal data type. Aggiungendo il carattere identificatore di tipo @ a qualsiasi identificatore, se ne determina la conversione al tipo di dati Decimal.Appending the identifier type character @ to any identifier forces it to Decimal.

  • Tipo di Framework.Framework Type. Il tipo corrispondente in .NET Framework è la struttura System.Decimal.The corresponding type in the .NET Framework is the System.Decimal structure.

IntervalloRange

Potrebbe essere necessario usare il carattere di tipo D per assegnare un valore di grandi dimensioni a una variabile o a una costante Decimal.You might need to use the D type character to assign a large value to a Decimal variable or constant. 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 riportato di seguito.This requirement is because the compiler interprets a literal as Long unless a literal type character follows the literal, as the following example shows.

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.The declaration for bigDec1 doesn't produce an overflow because the value that's assigned to it falls within the range for Long. Il valore Long può essere assegnato alla variabile Decimal.The Long value can be assigned to the Decimal variable.

La dichiarazione per bigDec2 genera un errore di overflow perché il valore assegnato è troppo grande per Long.The declaration for bigDec2 generates an overflow error because the value that's assigned to it is too large for Long. Poiché il valore letterale numerico non può essere prima interpretato come Long, non può essere assegnato alla variabile Decimal.Because the numeric literal can't first be interpreted as a Long, it can't be assigned to the Decimal variable.

Per bigDec3, il carattere di tipo letterale D risolve il problema forzando il compilatore a interpretare il valore letterale come Decimal anziché come Long.For bigDec3, the literal type character D solves the problem by forcing the compiler to interpret the literal as a Decimal instead of as a Long.

Vedere ancheSee also