TOC

This article is currently in the process of being translated into Italian (~99% done).

Tipi di dati:

Floating points

I numeri Floating-point (Tipi numerici a virgola mobile) sono numeri che hanno una parte frazionaria (solitamente espressa a punti decimali). Ti starai chiedendo perchè non si utilizza un tipo di dato singolo per i numeri (frazioni o non frazioni), ma questo perchè è molto piu veloce per il computer avere a che fare con numer interi rispetto a numeri contenenti frazioni. Quindi ha senso avere una distinzione fra i due - se sai di aver a che fare con numeri interi, utilizza int come tipo di dati. Altrimenti, utilizza una dei tipi di dati a virgola mobile (float) descritti in questo articolo.

Utilizzare un valore a virgola mobile è facile tanto quanto utilizzare un intero, anche se si hanno un pò di più preoccupazioni. Per il momento, guardiamo come sono questi tipi quando ne dichiariamo uno dei piu utilizzati: Il double.

double number;

Esattamente come gli interi, puoi assegnarne il valore quando lo dichiari:

double number = 42.0;

Lo stesso vale per i tipi float e decimal, ne discuteremo fra un secondo, qui la notazione è leggermente diversa:

double doubleVal = 42.0;
float floatVal = 42.0f;
decimal decimalVal = 42.0m;

Nota come abbiamo la "f" e la "m" dopo i numeri - Questo dice al compilatore che gli stiamo assegnango un valore float o decimal. Senza di essi, C# li interpreterà come double, che non possono essere convertiti automaticamente in float o decimal.

float, double o decimal?

Utilizzare numeri a virgola mobile in programmazione ha sempre causato un sacco di questioni e preoccupazioni. Pe resempio, C# ha almeno tre tipi di data per trattare numeri non interi:

  • float (un alterego per System.Single)
  • double (un alterego per System.Double)
  • decimal (un alterego per System.Decimal)

La differenza alla radice può essere difficile da capire, a meno che non si ha un sacco di conoscenza su come i computer funzionano internamente. Quindi restiamo su cose più pratiche.

Generalmente, la differenza dei tipi floar, double e decimal sta nella precisione, quindi quanta memoria viene utilizzata per immagazzinarli. La variabile float e la meno costosa - può rappresentare numeri a 7 cifre. La variabile double è piu precisa, 16 cifre mentre decimal è la più precisa, con un massimo di 29 cifre.

Ti starai chiedendo a cosa serve tutta questa precisione, la risposta è "cose di matematica". Il classico esempio per capirne la differenza è di dividere 10 con 3. Molti lo faranno in testa e diranno che il risultato è 3.33, ma molte altre persone sanno che non si tratta di una risposta accurata. La vera risposta è 3.33 seguito da molti altri 3 - quanti? quando facciamo il calcolo è C# a deciderlo, determinato dal tipo di data. Prova il seguente esempio:

float a = 10f / 3;
Console.WriteLine(a);
double b = 10d / 3;
Console.WriteLine(b);
decimal c = 10m / 3;
Console.WriteLine(c);

Stesso calcolo, con diversi tipi di dati. Il risultato è il seguente:

a: 3.333333
b: 3.33333333333333
c: 3.3333333333333333333333333333

La differenza è abbastanza evidente, ma di quanta precisione abbiamo realmente bisogno per la maggior parte dei compiti?

Come scegliere

Per prima cosa, considera quante cifre hai bisogno di immagazzinare. Una variabile float puo contenerne solo 7, quindi se hai bisogno di un numero più grande di questo, vorrai utilizzare double o decimal al suo posto.

In secondo luogo, entrambe le variabili float e double rappresentano valori approssimati del valore reale - in altre parole, potrebbe non essere esatto sulle ultime cifre. Questo significa che una volta che inizi a fare più e più calcoli con queste variabili, potrebbero non essere più precise, il ciò significa che i due valori che dovebbero essere uguali potrebbero non esserlo più.

Quindi, per situazioni dove la precisione è la preoccupazione primaria, dovresti utilizzare il tipo decimal. Un ottimo esempio è il rappresentare numeri finanziari (soldi) - non vuoi aggiungere 10 valori in contabilità per poi scoprire che i risultati non sono quello che ti aspetti. D'altro canto, se le prestazioni sono più importanti, dovresti usare float (per numeri piccoli) o double(per numeri più grandi). Una variabile decimal è, grazie alla sua precisione aggiuntiva, molto piu lenta della variabile float - alcuni test mostrano che può essere piu lenta di 20 volte!

Sommario

Quando si lavora con numeri a virgola mobile, dovresti usare le variabili float o double quando la precisione è meno importante delle prestazioni. D'altro canto, se vuoi la massima precisione e sei disposto ad accettare livelli minori di prestazioni, dovresti utilizzare la variabile decimal - specialmente in caso di numeri finanziari.

Se vuoi sapere di più sulla base della differenza fra questi tipi di dati, o altri dettagli, dovresti guardare quest'articolo molto dettagliato :What Every Computer Scientist Should Know About Floating-Point Arithmetic

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!