Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Contém valores assinados de 128 bits (16 bytes) que representam números inteiros de 96 bits (12 bytes) dimensionados por uma potência variável de 10. O fator de escala especifica o número de dígitos à direita da vírgula 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,000000000000000000000000001 (+/-1E-28).
Observações
O Decimal tipo de dados 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. É particularmente adequado para cálculos, como o financeiro, 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. ADecimalestrutura contém um valor inteiro binário, juntamente com um bit de sinal e um fator de escala inteira que especifica qual parte do valor é uma fração decimal. Devido a isso,Decimalos números têm uma representação mais precisa na memória do que os tipos de vírgula flutuante (SingleeDouble).Desempenho. O
Decimaltipo de dados é o mais lento de todos os tipos numéricos. Você deve pesar a importância da precisão em relação ao desempenho antes de escolher um tipo de dados.Alargamento. O tipo de dados
Decimalpode ser convertido emSingleouDoublesem encontrar um erro System.OverflowException. No entanto, essa conversão pode resultar em perda de precisão, já queSingleeDoublepriorizam acomodar 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 Double perde precisão devido às limitações do tipo de dados Double.
Decimal value: 1234567890123456789012345
Double value: 1.23456789012346E+24
Zeros à direita. Visual Basic não armazena zeros à direita em um
Decimalliteral. No entanto, umaDecimalvariável preserva quaisquer zeros à direita adquiridos computacionalmente. O exemplo a seguir ilustra isso.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 do
MsgBoxexemplo anterior é a seguinte:d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4Digite caracteres. Anexar o caractere
Dde tipo literal a um literal força-oDecimalao tipo de dados. Anexar o caractere@de tipo de identificador a qualquer identificador força-o aDecimal.Tipo de estrutura. O tipo correspondente no .NET Framework é a System.Decimal estrutura.
Intervalo
Talvez seja necessário usar o D caractere tipo para atribuir um valor grande a uma Decimal variável ou constante. 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 para bigDec1 não produz um estouro porque o valor atribuído a ela está dentro do intervalo para Long. O Long valor pode ser atribuído à Decimal variável.
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 primeiro ser interpretado como um Long, ele não pode ser atribuído à Decimal variável.
Para bigDec3, o caractere D de tipo literal resolve o problema forçando o compilador a interpretar o literal como um Decimal em vez de como um Long.