Tipo de dados decimais (Visual Basic)
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.
Decimal
não é um tipo de dados de ponto flutuante. ADecimal
estrutura 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,Decimal
os números têm uma representação mais precisa na memória do que os tipos de vírgula flutuante (Single
eDouble
).Desempenho. O
Decimal
tipo 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
Decimal
tipo de dados é ampliado paraSingle
ouDouble
. Isso significa que você pode converterDecimal
para qualquer um desses tipos sem encontrar um System.OverflowException erro.Zeros à direita. Visual Basic não armazena zeros à direita em um
Decimal
literal. No entanto, umaDecimal
variá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
MsgBox
exemplo anterior é a seguinte:d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
Digite caracteres. Anexar o caractere
D
de tipo literal a um literal força-oDecimal
ao 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
.