decimal (referência de C#)

A palavra-chave de decimal indica um tipo de dados de 128 bits.Em comparação com tipos de ponto flutuante, o tipo de decimal tem mais precisão e um intervalo menor, que faz a apropria para cálculos financeiros e monetários.O intervalo e a precisão aproximados para o tipo de decimal são mostrados na tabela a seguir.

Tipo

aproxime o intervalo

precisão

tipo do .NET Framework

decimal

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

28-29 dígitos significativos

System.Decimal

Literais

Se você quiser um literal numérico 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 double e gera um erro do compilador.

conversões

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

decimal myMoney = 300;

não há nenhuma conversão implícita entre tipos de ponto flutuante e o tipo de 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 numérico integral na mesma expressão.Em o entanto, misturar decimal e tipos de ponto flutuante sem uma conversão causa um erro de compilação.

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

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

A saída do decimal de formatação

Você pode formatar os resultados usando o método de String.Format , ou o método de Console.Write , que chama String.Format().O formato de moeda é especificado usando a cadeia de caracteres padrão “C” ou “c de formato de moeda”, conforme mostrado no segundo exemplo posteriormente em este artigo.Para mais informações sobre o método String.Format, consulte String.Format.

Exemplo

Em esse exemplo, decimal e int são mistos na mesma expressão.O resultado é avaliada como decimal o tipo.

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

public class TestDecimal
{
    static void Main()
    {
        decimal d = 9.1m;
        int y = 3;
        Console.WriteLine(d + y);   // Result converted to decimal
    }
}
// Output: 12.1

Em esse exemplo, a saída são formatados usando cadeias de caracteres de formato de moeda.Observe que x será arredondado porque as casas decimais exceder $0,99.yvariável, que representa os dígitos exatos máximo, é exibido 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 Especificação de linguagem do C# A especificação da linguagem é a fonte definitiva para a sintaxe e o uso da linguagem C#.

Consulte também

Referência

Palavras-chave C#

Tabela de tipos integral (referência de C#)

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

Tabela de conversões numérico implícito (referência de C#)

Tabela de conversões numérico explícita (referência de C#)

Decimal

Conceitos

Guia de programação do C#

Cadeias de caracteres de formato numérico padrão

Outros recursos

Referência de C#