Compartir a través de


decimal (Referencia de C#)

La palabra clave decimal indica un tipo de datos de 128 bits. Comparado con los tipos de punto flotante, el tipo decimal tiene una mayor precisión y un intervalo más reducido, lo que lo hace adecuado para los cálculos financieros y monetarios. El intervalo aproximado y la precisión para el tipo decimal se muestran en la siguiente tabla.

Tipo

Intervalo aproximado

Precisión

Tipo de .NET Framework

decimal

(de -7,9 x 1028 a 7,9 x 1028) / (100 a 28)

28-29 dígitos significativos

Decimal

Literales

Si desea que un literal real numérico se trate como decimal, use el sufijo m o M; por ejemplo:

decimal myMoney = 300.5m;

Sin el sufijo m, el número se trata como double y genera un error del compilador.

Conversiones

Los tipos enteros se convierten implícitamente en decimal y el resultado se evalúa como decimal. Por consiguiente, es posible inicializar una variable decimal mediante un literal entero, sin el sufijo, de la manera siguiente:

decimal myMoney = 300;

No hay una conversión implícita entre los tipos de punto flotante y el tipo decimal; por lo tanto, se debe usar una conversión entre ambos. Por ejemplo:

decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;

Asimismo, puede mezclar decimal y tipos enteros numéricos en la misma expresión. No obstante, al mezclar decimal y tipos de punto flotante sin una conversión se produce un error de compilación.

Para obtener más información sobre las conversiones numéricas implícitas, consulte Tabla de conversiones numéricas implícitas (Referencia de C#).

Para obtener más información sobre las conversiones numéricas explícitas, consulte Tabla de conversiones numéricas explícitas (Referencia de C#).

Aplicar formato a resultados decimales

Puede aplicar formato a los resultados mediante el método String.Format o a través del método Console.Write, que llama a String.Format(). El formato de divisa se especifica mediante la cadena de formato de divisa estándar "C" o "c", como se muestra en el segundo ejemplo más adelante en este artículo. Para obtener más información sobre el método String.Format, vea String.Format.

Ejemplo

En el ejemplo siguiente se genera un error del compilador al intentar agregar las variables double y 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);

El resultado es el siguiente error:

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

En este ejemplo, decimal e int se mezclan en la misma expresión. El resultado se evalúa como tipo 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

En este ejemplo, se da formato a los resultados mediante la cadena de formato de divisa. Observe que x se redondea, ya que las posiciones decimales superan 0,99 $. La variable y, que representa el máximo de dígitos exactos, se muestra exactamente en el formato correcto.

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
*/

Especificación del lenguaje C#

Para obtener más información, consulte la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.

Vea también

Referencia

Palabras clave de C#

Tabla de tipos enteros (Referencia de C#)

Tabla de tipos integrados (Referencia de C#)

Tabla de conversiones numéricas implícitas (Referencia de C#)

Tabla de conversiones numéricas explícitas (Referencia de C#)

Decimal

Conceptos

Guía de programación de C#

Cadenas con formato numérico estándar

Otros recursos

Referencia de C#