Esta documentación está archivada y no tiene mantenimiento.

Decimal (Tipo de datos, Visual Basic)

Contiene valores de 128 bits con signo (16 bytes) que representan números enteros de 96 bits (12 bytes) que se ajustan a una potencia variable de 10. El factor de ajuste especifica el número de dígitos a la derecha del separador decimal; comprendidos entre 0 y 28. Con un ajuste de 0 (sin decimales), el valor más grande posible es +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9228162514264337593543950335E+28). Con 28 posiciones decimales, el valor más grande es +/-7.9228162514264337593543950335 y el valor más pequeño distinto de cero es +/-0.0000000000000000000000000001 (+/-1E-28).

El tipo de datos Decimal proporciona el número máximo de dígitos significativos para un número. Admite hasta 29 dígitos significativos y puede representar valores que superan 7.9228 x 10^28. Es especialmente cómodo para cálculos, por ejemplo, financieros, que requieren un gran número de dígitos pero no puede tolerar errores del redondeo.

El valor predeterminado de Decimal es 0.

Sugerencias de programación

  • Precisión. Decimal no es un tipo de datos de punto flotante. La estructura Decimal contiene un valor entero binario, junto con un bit de signo y un factor de ajuste de entero que especifica qué parte del valor es una fracción decimal. Debido a esto, los números Decimal tienen una representación más precisa en la memoria que los tipos de punto flotante (Single y Double).

  • Rendimiento. El tipo de datos Decimal es el más lento de todos los tipos numéricos. Debe considerar la importancia de la precisión frente al rendimiento antes de elegir un tipo de datos.

  • Ampliación. El tipo de datos Decimal se amplía a Single o Double. Esto significa que se puede convertir Decimal a cualquiera de estos tipos sin encontrar un error System.OverflowException.

  • Ceros finales. Visual Basic no almacena los ceros finales en un literal Decimal. Sin embargo, una variable Decimal conserva cualquier cero final adquirido de forma computacional. Esto se ilustra en el siguiente ejemplo:

    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))
    

    El resultado de MsgBox en el ejemplo anterior es el siguiente:

    d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4

  • Caracteres de tipo. Al agregar el carácter de tipo de literal D a un literal, el tipo de datos se convierte en un tipo de datos Decimal. Si se agrega el carácter de tipo de identificador @ a cualquier identificador, se convierte su tipo de datos al tipo Decimal.

  • Tipo de Framework. El tipo correspondiente en .NET Framework es la estructura System.Decimal.

Intervalo

Podría necesitar utilizar el carácter de tipo D para asignar un valor grande a una variable o constante Decimal. Esto se ilustra en el siguiente ejemplo:

Dim bigDec1 As Decimal = 9223372036854775807   ' No overflow.
Dim bigDec2 As Decimal = 9223372036854775808   ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D  ' No overflow.

El compilador interpreta un literal como Long a menos que le siga un carácter de tipo de literal. La declaración para bigDec1 no genera un desbordamiento porque su valor está dentro del intervalo para Long. Sin embargo, el valor para bigDec2 es demasiado grande para Long, por lo que el compilador genera un error. El carácter de tipo de literal D resuelve el problema para bigDec3 obligando al compilador a que interprete el literal como Decimal.

Mostrar: