Tipi di dati numerici (Visual Basic)
Visual Basic include diversi tipi di dati numerici per la gestione dei numeri in varie rappresentazioni. I tipi integrali rappresentano solo numeri interi (positivi, negativi e zero) e i tipi non integrali rappresentano numeri con parti intere e frazionarie.
Per una tabella di confronto dei tipi di dati di Visual Basic, vedere Tipi di dati.
Tipi numerici integrali
I tipi di dati integrali sono quelli che rappresentano solo numeri senza parti frazionarie.
I tipi di dati integrali con segno sono il tipo di dati SByte (8 bit), il tipo di dati Short (16 bit), il tipo di dati Integer (32 bit) e il tipo di dati Long (64 bit). Se una variabile archivia sempre numeri interi anziché frazionari, dichiararla come uno di questi tipi.
I tipi di dati integrali senza segno sono il tipo di dati Byte (8 bit), il tipo di dati UShort (16 bit), il tipo di dati UInteger (32 bit) e il tipo di dati ULong (64 bit). Se una variabile contiene dati binari o dati di natura sconosciuta, dichiararla come uno di questi tipi.
Prestazioni
Le operazioni aritmetiche sono più veloci con i tipi integrali rispetto ad altri tipi di dati. Sono più veloci con i tipi Integer
e UInteger
in Visual Basic.
Numeri interi grandi
Se è necessario un numero intero maggiore di quello che può essere contenuto nel tipo di dati Integer
, è possibile usare invece il tipo di dati Long
. Le variabili Long
possono contenere numeri compresi tra -9.223.372.036.854.775.808 e 9.223.372.036.854.775.807. Le operazioni con Long
sono leggermente più lente di quelle con Integer
.
Se sono necessari valori ancora più grandi, è possibile usare il tipo di dati Decimal. In una variabile Decimal
è possibile contenere numeri compresi tra -79.228.162.514.264.337.593.543.950.335 e 79.228.162.514.264.337.593.543.950.335, se non si usano posizioni decimali. Tuttavia, le operazioni con numeri sono Decimal
notevolmente più lente rispetto a quelle con qualsiasi altro tipo di dati numerico.
Numeri interi piccoli
Se non è necessario l'intervallo completo del tipo di dati Integer
, è possibile usare il tipo di dati Short
, che può contenere numeri interi compresi tra -32.768 e 32.767. Per l'intervallo di numeri interi minimo, il tipo di dati SByte
contiene numeri interi compresi tra -128 e 127. Nel caso di un numero molto elevato di variabili che contengono numeri interi piccoli, Common Language Runtime può talvolta archiviare le variabili Short
e SByte
in modo più efficiente e risparmiare consumo di memoria. Tuttavia, le operazioni con Short
e SByte
sono leggermente più lente rispetto a quelle con Integer
.
Numeri interi senza segno
Se è certo che la variabile non debba mai contenere un numero negativo, è possibile usare i tipi senza segnoByte
, UShort
, UInteger
e ULong
. Ognuno di questi tipi di dati può contenere un numero intero positivo due volte maggiore del tipo con segno corrispondente (SByte
, Short
, Integer
e Long
). In termini di prestazioni, ogni tipo senza segno è altrettanto efficiente del tipo con segno corrispondente. In particolare, UInteger
condivide con Integer
il fatto distintivo di essere il più efficiente di tutti i tipi di dati numerici elementari.
Tipi numerici non integrali
I tipi di dati non integrali sono quelli che rappresentano numeri sia con parti intere che frazionarie.
I tipi di dati numerici non integrali sono Decimal
(virgola fissa a 128 bit), il tipo di dati Single (virgola mobile a 32 bit) e il tipo di dati Double (virgola mobile a 64 bit). Sono tutti tipi con segno. Se una variabile può contenere una frazione, dichiararla come uno di questi tipi.
Decimal
non è un tipo di dati a virgola mobile. I numeri Decimal
hanno un valore intero binario e un fattore di scala intero che specifica quale parte del valore è una frazione decimale.
È possibile usare le variabili Decimal
per i valori monetari. Il vantaggio è la precisione dei valori. Il tipo di dati Double
è più veloce e richiede meno memoria, ma è soggetto a errori di arrotondamento. Il tipo di dati Decimal
mantiene l'accuratezza completa a 28 posizioni decimali.
I numeri a virgola mobile (Single
e Double
) hanno intervalli maggiori rispetto ai numeri Decimal
, ma possono essere soggetti a errori di arrotondamento. I tipi a virgola mobile supportano meno cifre significative di ma Decimal
possono rappresentare valori di grandezza maggiore.
I valori numerici non irreversibili possono essere espressi come mmmEeee, in cui mmm è la mantissa (le cifre significative) ed eee è l'esponente (potenza di 10). I valori positivi massimi dei tipi non integrali sono 7,9228162514264337593543950335E+28 per Decimal
, 3,4028235E+38 per Single
e 1,79769313486231570E+308 per Double
.
Prestazioni
Double
è il tipo di dati più efficiente per i tipi di dati frazionari, perché i processori sulle piattaforme correnti eseguono operazioni a virgola mobile con precisione doppia. Tuttavia, le operazioni con Double
non sono veloci quanto quelle con i tipi integrali, ad esempio Integer
.
Ordini di grandezza piccoli
Per i numeri con ordini di grandezza minimi (più vicini allo 0), le variabili Double
possono contenere numeri fino -4,94065645841246544E-324 per valori negativi e fino a 4,94065645841246544E-324 per valori positivi.
Numeri frazionari piccoli
Se non è necessario l'intervallo completo del tipo di dati Double
, è possibile usare il tipo di dati Single
, che può contenere numeri a virgola mobile compresi tra -3,4028235E+38 e 3,4028235E+38. Gli ordini di grandezza minimi per le variabili Single
sono -1,401298E-45 per i valori negativi e 1,401298E-45 per i valori positivi. Nel caso di un numero molto elevato di variabili che contengono numeri a virgola mobile piccoli, Common Language Runtime può talvolta archiviare le variabili Single
in modo più efficiente e risparmiare consumo di memoria.