Il tipo decimal
è un tipo di dati a 128 bit adatto per i calcoli finanziari e monetari.
Il tipo decimal
può rappresentare valori compresi tra 1.0 × 10 -28 a circa 7.9 × 10 con 28-29 cifre significative.
L'insieme finito di valori di tipo decimal
sono di forma (-1) s × c × 10 - e, dove il segno s è 0 o 1, la coefficiente c è data da 0 ≤ c , e la scala e è tale che 0 ≤ e ≤ 28.
Il tipo decimal
non supporta zeri firmati, infiniti o NaN. A decimal
viene rappresentato come un intero a 96 bit ridimensionato di una potenza di dieci. Per i decimali con un valore assoluto inferiore a 1,0 m, il valore è esatto al 28 o posizione decimale, ma non oltre.
Per i decimali con un valore assoluto maggiore o uguale a 1,0 m, il valore è esatto a 28 o 29 cifre. Contrariamente ai tipi di dati float
e double
, i numeri decimali decimali come 0,1 possono essere rappresentati esattamente nella rappresentazione decimale. Nelle rappresentazioni float
e double
, tali numeri sono spesso frazioni infinite, rendendo tali rappresentazioni più soggette a errori di arrotondamento.
Se uno degli operandi di un operatore binario è di tipo decimal
, l'altro operando deve essere di tipo integrale o di tipo decimal
. Se è presente un operando di tipo integrale, viene convertito in decimal
prima che l'operazione venga eseguita.
Il risultato di un'operazione sui valori di tipo decimal
è quello che risulterebbe dal calcolo di un risultato esatto (scala di conservazione, come definito per ciascun operatore) e quindi arrotondamento per adattarsi alla rappresentazione. I risultati sono arrotondati al valore rappresentativo più vicino e, quando un risultato è ugualmente vicino a due valori rappresentabili, al valore che ha un numero pari nella posizione di cifra meno significativa (questo è noto come "arrotondamento bancario"). Un risultato zero ha sempre un segno di 0 e una scala di 0.
Se un'operazione decimale aritmetica produce un valore inferiore o uguale a 5 × 10 -29 in valore assoluto, il risultato dell'operazione diventa zero . Se un'operazione decimale aritmetica produce un risultato troppo grande per il formato decimal
, viene generato un valore System.OverflowException
.
Il tipo decimal
ha una precisione maggiore ma un intervallo inferiore rispetto ai tipi a virgola mobile. Pertanto, le conversioni dai tipi a virgola mobile a decimal
potrebbero produrre eccezioni di overflow e le conversioni da decimal
ai tipi a virgola mobile potrebbero causare una perdita di precisione. Per questi motivi, non esistono conversioni implicite tra i tipi a virgola mobile e decimal
, e senza i cast espliciti, non è possibile combinare operandi in virgola mobile e decimal
nella stessa espressione.
L' l'articolo collegato è stato utile; questo Mr. Skeet sembra una fonte affidabile di domande relative a C#. Ha molti articoli penetranti. –
lanciare nuovi SomeOneDoesntKnowJonSkeetException(); –
@Jouke: non c'è bisogno di un blocco 'try/catch', non verrà mai lanciato. –