Access

Extracción del número completo de un decimal en VBA

A veces deseamos extraer el número completo de un valor decimal.

Así que diga que está haciendo un aritmático como:

43/5

Que devuelve un valor de:

8.6

Y desea extraer únicamente el número entero, por lo que desea obtener:

8

Aquí hay algunas técnicas que puede emplear en VBA.

Los enfoques disponibles

Hay 3 enfoques que conozco para devolver el número completo de un valor decimal: int (), fix () y el operador de división entera. Todos funcionan de manera similar, pero hacen de diferentes maneras, ¡así que tenga cuidado de cuál adopta en su código!

Función int

Int(43/5) ' => 8

Función de reparación

Fix(43/5) ' => 8

Operador de división entera/operador de barras de granño

Aquí hay una posibilidad menos conocida. ¿Sabías que hay un ‘operador de división entera’? Entonces, en lugar de usar / (operador de división), realmente usa el \ (operador de división entera).

43 ' => 8

Negativo

Como siempre, tenga en cuenta la forma en que funcionan cada uno de estos enfoques para asegurarse de que está utilizando el enfoque de código adecuado para satisfacer sus necesidades.

Por ejemplo, si miramos int () vs. Fix vs. \ por un momento, para números negativos, difieren:

  • Int () Devuelve el primer entero negativo menor o igual al número (redondea).
    Int(-43/5) ' => -9
  • Fix () Devuelve el primer entero negativo mayor o igual al número (redondeado).
    Fix(-43/5) ' => -8
  • El operador de la división entera.
    -43 ' => -8

Ten cuidado con el pensamiento

Exploremos por un minuto un valor de 8.6 y queremos extraer la porción 8. Presta atención a los resultados de los diversos enfoques.

Podríamos hacer:

Int(8.6) ' => 8
Fix(8.6) ' => 8
8.6 ' => 9

Entonces, la forma en que cada enfoque maneja el redondeo puede afectar la salida resultante.

Una función definida por el usuario

Solo por diversión, como demostración, aquí una forma de crear su propia función de número completo donde puede personalizar la salida (agregue el redondeo de su elección, …)

Function WholeNumber(dNumber As Double) As Long
    Dim sNumber               As String
    Dim lDecimalPosition      As Long

    sNumber = CStr(dNumber) ' Convert to a string
    lDecimalPosition = InStr(sNumber, ".") ' Locate the Decimal

    If lDecimalPosition = 0 Then
        WholeNumber = dNumber ' Already a whole number
    Else
        WholeNumber = CLng(Left(sNumber, lDecimalPosition - 1))
    End If
End Function

Y si realizamos las mismas pruebas que anteriormente, obtenemos:

WholeNumber(43/5) ' => 8
WholeNumber(-43/5) ' => -8
WholeNumber(8.6) ' => 8

Algunos recursos

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba