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. A Decimal 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 e Double).

  • 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 para Single ou Double. Isso significa que você pode converter Decimal 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, uma Decimal 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-o Decimal ao tipo de dados. Anexar o caractere @ de tipo de identificador a qualquer identificador força-o a Decimal.

  • 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.

Consulte também