decimal (Riferimenti per C#)
La parola chiave decimal indica un tipo di dati a 128 bit.Rispetto ai tipi a virgola mobile, il tipo decimal è caratterizzato da una maggiore precisione e da un intervallo ridotto che lo rendono appropriato per calcoli finanziari e monetari.Nella tabella riportata di seguito vengono indicati l'intervallo approssimativo e il grado di precisione del tipo decimal.
Type |
Intervallo approssimativo |
Precisione |
Tipo .NET Framework |
---|---|---|---|
decimal |
(Da -7.9 x 1028 a 7.9 x 1028) / (100 to 28) |
28-29 cifre significative |
Valori letterali
Se si desidera che un valore letterale numerico reale venga gestito come decimal, utilizzare il suffisso m o M, ad esempio:
decimal myMoney = 300.5m;
Senza il suffisso m, il numero viene infatti gestito come valore double, provocando un errore di compilazione.
Conversioni
I tipi integrali vengono convertiti in modo implicito in decimal e il risultato restituisce decimal.È pertanto possibile inizializzare una variabile decimale mediante un valore letterale integer, senza il suffisso, ad esempio:
decimal myMoney = 300;
Non esiste alcuna conversione implicita tra i tipi a virgola mobile e il tipo decimal. È pertanto necessario utilizzare un cast per operare una conversione tra questi due tipi.Ad esempio:
decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;
È inoltre possibile combinare tipi decimal e tipi integrali numerici nella stessa espressione.Tuttavia, la combinazione di tipi decimal e tipi a virgola mobile senza un cast genera un errore di compilazione.
Per ulteriori informazioni sulle conversioni numeriche implicite, vedere Tabella delle conversioni numeriche implicite (Riferimenti per C#).
Per ulteriori informazioni sulle conversioni numeriche esplicite, vedere Tabella delle conversioni numeriche esplicite (Riferimenti per C#).
Formattazione dell'output di tipo decimal
È possibile applicare il formato desiderato ai risultati utilizzando il metodo String.Format o mediante il metodo Console.Write che chiama String.Format().Il formato valuta viene specificato tramite la stringa di formato valuta standard "C" o "c", come illustrato nel secondo esempio riportato più avanti.Per ulteriori informazioni sul metodo String.Format, vedere String.Format.
Esempio
Nell'esempio riportato di seguito vengono combinati nella stessa espressione un tipo decimal e un tipo int.Il risultato restituisce il tipo decimal.
L'esempio seguente genera un errore del compilatore tenta di aggiungere doppia e variabili decimal.
double dub = 9;
// The following line causes an error that reads "Operator '+' cannot be applied to
// operands of type 'double' and 'decimal'"
Console.WriteLine(dec + dub);
// You can fix the error by using explicit casting of either operand.
Console.WriteLine(dec + (decimal)dub);
Console.WriteLine((double)dec + dub);
Viene restituito l'errore seguente:
Operator '+' cannot be applied to operands of type 'double' and 'decimal'
public class TestDecimal
{
static void Main()
{
decimal d = 9.1m;
int y = 3;
Console.WriteLine(d + y); // Result converted to decimal
}
}
// Output: 12.1
In questo esempio l'output viene formattato mediante la stringa del formato valuta (in dollari).Si noti che x viene arrotondato perché le cifre decimali sono superiori a $0,99.La variabile y, che rappresenta le cifre a precisione massima, viene invece visualizzata nel formato esatto.
public class TestDecimalFormat
{
static void Main()
{
decimal x = 0.999m;
decimal y = 9999999999999999999999999999m;
Console.WriteLine("My amount = {0:C}", x);
Console.WriteLine("Your amount = {0:C}", y);
}
}
/* Output:
My amount = $1.00
Your amount = $9,999,999,999,999,999,999,999,999,999.00
*/
Specifiche del linguaggio C#
Per ulteriori informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.
Vedere anche
Riferimenti
Tabella dei tipi integrali (Riferimenti per C#)
Tabella dei tipi incorporati (Riferimenti per C#)
Tabella delle conversioni numeriche implicite (Riferimenti per C#)
Tabella delle conversioni numeriche esplicite (Riferimenti per C#)
Concetti
Stringhe di formato numerico standard