Tipo de dados decimal (Visual Basic)
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.
Decimal
não é um tipo de dados de ponto flutuante. A estruturaDecimal
conté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úmerosDecimal
têm uma representação mais precisa na memória do que tipos de ponto flutuante (Single
eDouble
).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
Decimal
é ampliado paraSingle
ouDouble
. Isso significa que você pode converterDecimal
para qualquer um desses tipos sem encontrar um erro System.OverflowException.Zeros à direita. O Visual Basic não armazena zeros à direita em um literal
Decimal
. No entanto, uma variávelDecimal
preserva 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
MsgBox
no exemplo anterior é a seguinte:d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
Caracteres de tipo. Acrescentar o caractere de tipo literal
D
a 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
.