Decimal (Tipo de datos, Visual Basic)

Contiene valores de 128 bits (16 bytes) firmados que representan números enteros de 96 bits (12 bytes) escalados por una potencia variable de 10. El factor de escala especifica el número de dígitos a la derecha del separador decimal; oscila entre 0 y 28. Con una escala de 0 (sin posiciones 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).

Comentarios

El tipo de datos Decimal proporciona la mayor cantidad de dígitos significativos para un número. Admite hasta 29 dígitos significativos y puede representar valores superiores a 7,9228 x 10^28. Resulta especialmente adecuado para cálculos, como financieros, que requieren una gran cantidad de dígitos pero que no pueden tolerar errores de 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 escala de enteros que especifica qué parte del valor es una fracción decimal. Por este motivo, los números Decimal deben tener en memoria una representación más precisa 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 ponderar la importancia de la precisión con respecto 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 puede convertir Decimal en cualquiera de estos tipos sin que se produzcan un error System.OverflowException.

  • Ceros finales. Visual Basic no almacena ceros finales en un literal Decimal. Sin embargo, una variable Decimal conserva los ceros finales adquiridos mediante cálculo. 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))
    

    La salida de MsgBox en el ejemplo anterior es la siguiente:

    d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
    
  • Caracteres de tipo. Al agregar el carácter de tipo literal D a un literal, el tipo de datos se convierte forzosamente en el tipo de datos Decimal. Si se agrega el carácter de tipo identificador @ a cualquier identificador, se convierte forzosamente al tipo Decimal.

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

Intervalo

Es posible que tenga que usar el carácter de tipo D para asignar un valor grande a una constante o variable Decimal. Este requisito se debe a que el compilador interpreta un literal como Long, a menos que un carácter de tipo literal siga el literal, tal como se muestra en el ejemplo siguiente.

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

La declaración de bigDec1 no genera un desbordamiento, porque el valor que tiene asignado se encuentra dentro del rango de Long. El valor Long se puede asignar a la variable Decimal.

La declaración de bigDec2 genera un error de desbordamiento, porque el valor que tiene asignado es demasiado grande para Long. Como el literal numérico no se puede interpretar primero como Long, no se le puede asignar a la variable Decimal.

Para bigDec3, el carácter de tipo literal D resuelve el problema al forzar al compilador a interpretar el literal como Decimal en lugar de como Long.

Consulte también