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

System.Decimal

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

C# Keywords

Integral Types Table (C# Reference)

Built-In Types Table (C# Reference)

Implicit Numeric Conversions Table (C# Reference)

Explicit Numeric Conversions Table (C# Reference)

Decimal

Conceitos

C# Programming Guide

Sequências de Caracteres de Formato Numérico Padrão

Outros recursos

C# Reference