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 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 |
(de -7,9 x 1028 a 7,9 x 1028) / (10de 0 a 28) |
28-29 dígitos significativos |
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 enteros 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 enteros 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 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 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 se genera un error del compilador intenta agregar doble y las variables 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'
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 divisa 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 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
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#)
Conceptos
Cadenas con formato numérico estándar