decimal (C# Reference)
O decimal palavra-chave indica um tipo de dados de 128 bits. Em comparação com os tipos de ponto flutuante, o decimal tipo tem mais precisão e um intervalo menor, o que torna apropriado para cálculos financeiros e monetários. O intervalo aproximado e a precisão para o decimal tipo são mostrados na tabela a seguir.
Tipo |
Aproximar Range |
Precisão |
Tipo .NET Framework |
---|---|---|---|
decimal |
(-7.9 x 1028 to 7.9 x 1028) / (100 to 28) |
dígitos significativos 28-29 |
Literais
Se você desejar um literal numérico de real a ser tratado como decimal, use o sufixo m ou M, por exemplo:
decimal myMoney = 300.5m;
Sem o sufixo m, o número é tratado como um double e gera um erro do compilador.
Conversões
Os tipos integrais são implicitamente convertidos em decimal e o resultado é avaliado como decimal. Portanto, você pode inicializar uma variável decimal usando um literal Inteiro, sem o sufixo, da seguinte maneira:
decimal myMoney = 300;
Não há nenhuma conversão implícita entre tipos de ponto flutuante e o decimal tipo; Portanto, uma conversão deve ser usada para converter entre esses dois tipos. Por exemplo:
decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;
Você também pode misturar decimal e tipos numéricos de integrais na mesma expressão. No entanto, a mistura decimal e tipos de ponto flutuante sem uma conversão causa um erro de compilação.
Para obter mais informações sobre conversões implícitas de numéricas, consulte Implicit Numeric Conversions Table (C# Reference).
Para obter mais informações sobre conversões explícitas de numéricas, consulte Explicit Numeric Conversions Table (C# Reference).
Formatação saída decimal
Você pode formatar os resultados usando o String.Format método, ou por meio de Console.Write método, que chama String.Format(). O formato da Unidade Monetária é especificado usando a string de formatação de Unidade Monetária padrão "C" ou "c", conforme pode-se observar no segundo exemplo neste artigo. Para mais informações sobre o método String.Format, consulte String.Format.
Exemplo
Neste exemplo, um decimal e um int estão misturados na mesma expressão. O resultado é avaliada como o decimal tipo.
O exemplo a seguir usa uma instrução que tenta adicionar o double e decimal variáveis:
double x = 9;
Console.WriteLine(d + x); // Error
O resultado é o seguinte erro:
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
Neste exemplo, a saída é formatada usando a seqüência de caracteres de formato de moeda. Observe que x é arredondado porque as casas decimais excedem $0.99. A variável y, que representa os dígitos exatos máximo, é exibida exatamente no formato correto.
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
*/
Especificação da linguagem C#
Para obter mais informações, consulte C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.
Consulte também
Referência
Integral Types Table (C# Reference)
Built-In Types Table (C# Reference)
Implicit Numeric Conversions Table (C# Reference)
Explicit Numeric Conversions Table (C# Reference)
Conceitos
Sequências de Caracteres de Formato Numérico Padrão