decimal (Referencia de C#)

Actualización: noviembre 2007

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 cálculos financieros y monetarios. El intervalo aproximado y la precisión para el tipo decimal aparecen en la siguiente tabla.

Tipo

Intervalo aproximado

Precisión

Tipo de .NET Framework

decimal

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

28-29 dígitos significativos

System.Decimal

Literales

Si desea tratar un literal numérico real como decimal, utilice el sufijo m o M; por ejemplo:

decimal myMoney = 300.5m;

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

Conversiones

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

decimal myMoney = 300;

No existe conversión implícita entre tipos de punto flotante y el tipo decimal; por lo tanto, se debe utilizar una conversión de tipos para convertir estos dos tipos. Por ejemplo:

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

Además, se pueden combinar tipos integrales numéricos y decimal en la misma expresión. No obstante, si se combinan tipos de punto flotante con el tipo decimal sin realizar una conversión explícita de tipos, se producirá un error de compilación.

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

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

Dar formato a la presentación de valores de tipo decimal

Se puede dar formato a los resultados mediante el método String.Format o a través del método Console.Write, el cual llama a String.Format(). El formato de moneda se especifica mediante la cadena de formato de moneda 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 este ejemplo, se combina un tipo decimal y un tipo int en la misma expresión. El resultado se evalúa como tipo decimal.

El ejemplo siguiente utiliza una instrucción que intenta agregar las variables doble y decimal:

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

El resultado es el siguiente error:

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

En este ejemplo, se utiliza la cadena de formato de moneda para dar formato al resultado. Observe que x se redondea, ya que los dígitos decimales superan $0,99. La variable y, que representa el número 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, vea las secciones siguientes de Especificación del lenguaje C#.

  • 1.3 Tipos y variables

  • 4.1.7 El tipo decimal

Vea también

Conceptos

Guía de programación de C#

Referencia

Palabras clave de C#

Tabla de tipos integrales (Guía de programación 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

Otros recursos

Referencia de C#