Decimal (Tipo de datos, Visual Basic)

Contiene valores de 128 bits (16 bytes) con signo que representan enteros de 96 bits (12 bytes) ajustados por una potencia variable de 10. El factor de escala especifica el número de dígitos que hay a la derecha del separador decimal; va de 0 a 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 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 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 literal D a un literal, el tipo de datos se convierte al tipo de datos Decimal. Si se agrega el carácter de tipo identificador @ a cualquier identificador, se convierte su tipo de datos al tipo Decimal.

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

Intervalo

Podría necesitar utilizar el carácter de tipo D para asignar un valor grande a una variable o constante Decimal. Este requisito es porque el compilador interpreta un literal como Long a menos que un carácter de tipo literal siga el literal, 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 bigDec1 no genera un desbordamiento porque el valor asignado que pertenece al intervalo para Long. El valor Long se puede asignar a la variable Decimal .

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

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

Vea también

Referencia

Resumen de tipos de datos (Visual Basic)

Decimal

Decimal.#ctor

Single (Tipo de datos, Visual Basic)

Double (Tipo de datos, Visual Basic)

Funciones de conversión de tipos (Visual Basic)

Resumen de conversión (Visual Basic)

Math.Round

Conceptos

Uso eficiente de tipos de datos (Visual Basic)