Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Mantém valores de 128 bits (16 bytes) assinados que representam números inteiros de 96 bits (12 bytes) elevados a uma potência variável de 10. O fator de colocação em escala especifica o número de dígitos à direita do ponto decimal; varia de 0 a 28. Com uma escala de 0 (sem casas decimais), o maior valor possível é +/-79.228.162.514.264.337.593,543.950.335 (+/-7.9228162514264337593543950335E+28). Com 28 casas decimais, o maior valor é +/-7,9228162514264337593543950335, e o menor valor diferente de zero é +/-0,0000000000000000000000000001 (+/-1E-28).
Comentários
O tipo de dados Decimal fornece o maior número de dígitos significativos para um número. Ele suporta até 29 dígitos significativos e pode representar valores superiores a 7,9228 x 10^28. Ele é particularmente adequado para cálculos, como financeiros, que exigem um grande número de dígitos, mas não toleram erros de arredondamento.
O valor padrão de Decimal é 0.
Dicas de programação
Precisão.
Decimalnão é um tipo de dados de ponto flutuante. A estruturaDecimalcontém um valor inteiro binário, junto com um bit de sinal e um fator de escala inteiro que especifica qual parte do valor é uma fração decimal. Por isso, os númerosDecimaltêm uma representação mais precisa na memória do que tipos de ponto flutuante (SingleeDouble).Desempenho. O tipo de dados
Decimalé o mais lento de todos os tipos numéricos. Você deve avaliar a importância da precisão em relação ao desempenho antes de escolher um tipo de dados.Ampliação. O tipo de dados
Decimalpode ser convertido emSingleouDoublesem encontrar um erro de System.OverflowException. No entanto, essa conversão pode resultar em perda de precisão, poisSingleeDoublepriorizam a acomodação de valores maiores em vez de preservar a precisão.
Dim decimalValue As Decimal = 1234567890123456789012345D
Dim doubleValue As Double = CDbl(decimalValue)
Console.WriteLine("Decimal value: " & decimalValue)
Console.WriteLine("Double value: " & doubleValue)
A saída do exemplo anterior mostra que o valor decimal mantém a precisão total, enquanto o valor duplo perde a precisão devido às limitações do tipo de dados Double.
Decimal value: 1234567890123456789012345
Double value: 1.23456789012346E+24
Zeros à direita. O Visual Basic não armazena zeros à direita em um literal
Decimal. No entanto, uma variávelDecimalpreserva todos os zeros à direita adquiridos computacionalmente. O exemplo a seguir ilustra essa situação.Dim d1, d2, d3, d4 As Decimal d1 = 2.375D d2 = 1.625D d3 = d1 + d2 d4 = 4.000D MsgBox("d1 = " & CStr(d1) & ", d2 = " & CStr(d2) & ", d3 = " & CStr(d3) & ", d4 = " & CStr(d4))A saída de
MsgBoxno exemplo anterior é a seguinte:d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4Caracteres de tipo. Acrescentar o caractere de tipo literal
Da um literal o força ao tipo de dadosDecimal. Acrescentar o caractere de tipo identificador@a qualquer identificador o força ao tipoDecimal.Tipo do Framework. O tipo correspondente no .NET Framework é a estrutura System.Decimal.
Intervalo
Talvez seja necessário usar o caractere do tipo D para atribuir um valor grande a uma variável ou constante Decimal. Esse requisito ocorre porque o compilador interpreta um literal como Long, a menos que um caractere de tipo literal siga o literal, como mostra o exemplo a seguir.
Dim bigDec1 As Decimal = 9223372036854775807 ' No overflow.
Dim bigDec2 As Decimal = 9223372036854775808 ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D ' No overflow.
A declaração de bigDec1 não produz um estouro porque o valor atribuído a ela está dentro do intervalo de Long. O valor Long pode ser atribuído à variável Decimal.
A declaração para bigDec2 gera um erro de estouro porque o valor atribuído a ela é muito grande para Long. Como o literal numérico não pode ser interpretado primeiro como um Long, ele não pode ser atribuído à variável Decimal.
Para bigDec3, o caractere de tipo literal D resolve o problema forçando o compilador a interpretar o literal como Decimal em vez de Long.