Condividi tramite


decimal (Riferimenti per C#)

La parola chiave decimal denota 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 adatto 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

±1.0 × 10−28 a ±7,9 × 1028

28-29 cifre significative

System.Decimal

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, e questo provoca 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. Di seguito è riportato un 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 genererà 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 System.Console.Write che chiama String.Format(). Il formato valuta viene specificato tramite la stringa di formato valuta standard "C" o "c", come illustrato nell'esempio 2. Per ulteriori informazioni sul metodo String.Format, vedere System.String.Format(System.String,System.Object).

Esempio

Nell'esempio riportato di seguito vengono combinati nella stessa espressione un tipo decimal e un tipo int. Il risultato restituisce il tipo decimal.

Se si tenta di aggiungere le variabili double e decimal utilizzando un'istruzione simile alla seguente:

double x = 9;
Console.WriteLine(d + x); // Error

verrà visualizzato il seguente messaggio di errore:

Operator '+' cannot be applied to operands of type 'double' and 'decimal'

// keyword_decimal.cs
// decimal conversion
using System;
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, è invece visualizzata nel formato esatto.

// keyword_decimal2.cs
// Decimal type formatting
using System;
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 le sezioni riportate di seguito in Specifiche del linguaggio C#:

  • 1.3 Tipi e variabili

  • 4.1.7 Tipo decimal

Vedere anche

Riferimenti

Parole chiave di C#
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#)
Decimal Structure

Concetti

Guida per programmatori C#

Altre risorse

Riferimenti per C#