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 mayor valor posible es +/-79.228.162.514.264.337.593,5 43 950 335 (+/-7.9228162514264337593543950335E+28). Con 28 posiciones decimales, el valor más grande es +/-7,9228162514264337543543950335 y el valor distinto de cero más pequeño es +/-0,000000000000000000000000001 (+/-1E-28).

Comentarios

El Decimal tipo de datos proporciona el mayor número 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. Es especialmente adecuado para cálculos, como financieros, que requieren un gran número de dígitos, pero 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 contiene un valor entero binario, junto con un bit de signo y un factor de escalado entero que especifica qué parte del valor Decimal es una fracción decimal. Por este problema, los números tienen una representación más precisa en memoria que los Decimal tipos de punto flotante ( y Single Double ).

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

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

  • Ceros finales. Visual Basic no almacena los ceros finales en un Decimal literal. Sin embargo, Decimal una variable conserva los ceros finales adquiridos computacionalmente. 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
    
  • Escriba Caracteres. 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 D carácter de tipo para asignar un valor grande a una variable o Decimal constante. Este requisito se debe a que el compilador interpreta un literal como a menos que un carácter de tipo literal siga el literal, como se muestra Long 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 no genera un desbordamiento porque el valor que se le asigna se encuentra bigDec1 dentro del intervalo de Long . El Long valor se puede asignar a la variable Decimal .

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

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

Consulta también