Share via


decimal (Referência de C#)

A palavra-chave decimal indica um tipo de dados de 128 bits. Comparado aos tipos de pontos flutuantes, o tipo decimal tem mais precisão e um intervalo menor que o torna apropriado para cálculos financeiros e monetários. O intervalo e a precisão aproximados para o tipo decimal são mostrados na tabela a seguir.

Tipo

Intervalo aproximado

Precisão

Tipo do .NET Framework

decimal

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

28 a 29 dígitos significativos

Decimal

Literais

Se você desejar tratar um literal numérico como decimal, use o sufixo m ou M, por exemplo:

decimal myMoney = 300.5m;

Sem o sufixo m, o número será tratado como double e gerará um erro do compilador.

Conversões

Os tipos integrais são convertidos implicitamente em decimal e o resultado é avaliado como decimal. Portanto, você pode inicializar uma variável decimal com um literal inteiro sem o sufixo como a seguir:

decimal myMoney = 300;

Não há nenhuma conversão implícita entre os tipos de pontos flutuantes e o tipo decimal. 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 integrais numéricos na mesma expressão. No entanto, misturar decimal e tipos de pontos flutuantes sem uma conversão causa um erro de compilação.

Para obter mais informações sobre conversões numéricas implícitas, consulte Tabela de conversões numéricas implícitas (Referência de C#).

Para obter mais informações sobre conversões numéricas explícitas, consulte Tabela de conversões numéricas explícitas (Referência de C#).

Formatando saída decimal

Você pode formatar os resultados ao usar o método String.Format ou Console.Write que chama String.Format(). O formato de moeda é especificado ao usar a cadeia de caracteres de formato de moeda padrão "C" ou "c", como mostrado no segundo exemplo posteriormente neste artigo. Para obter mais informações sobre o método String.Format, consulte String.Format.

Exemplo

O exemplo a seguir causa um erro do compilador ao tentar adicionar variáveis double e 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);

O resultado é o seguinte erro:

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

Neste exemplo, decimal e int são misturados na mesma expressão. O resultado é avaliado como o 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

Neste exemplo, a saída é formatada usando a cadeia de caracteres de formato de moeda. Observe que x é arredondado porque as casas decimais excedem US$ 0,99. A variável y, que representa os dígitos exatos máximos, é 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 a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Palavras-chave C#

Tabela de tipos integrais (Referência de C#)

Tabela de tipos internos (Referência de C#)

Tabela de conversões numéricas implícitas (Referência de C#)

Tabela de conversões numéricas explícitas (Referência de C#)

Decimal

Conceitos

Guia de Programação em C#

Cadeias de caracteres de formato numérico padrão

Outros recursos

Referência de C#