Partilhar via


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