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.

Vedi anche