Redondear dependiendo del valor del 3er y 4to decimal

Cómo redondear a dos decimales por ejemplo si tengo un valor de 25.5051 que redondee a 25.51 y si es 25.5050 ponga 25.50 osea que si es 51 o más redondee hacia arriba y si es 50 o menos lo deje igual

Respuesta
1

Si esa cifra no se utiliza o utilizo para un calculo (solo se trata de un 'redondeo estético') esa opción es valida, si hay procesamiento de datos no es la opción mas aconsejable.

20,5051 * 3 = 61,5153

20,50 * 3  = 61,5000

61,5153 <> 61,5000

Access tiene una función (Round) que utiliza la norma de redondeo de la banca .americana, y para redondeo bruto las funciones INT o FIX lo resuelven de forma sencilla.

Julián, con el mismo respeto:

Los cálculos que hagas son lo de menos, si el dato continua con cuatro decimales ( basta con mas de dos) que se muestren solo dos y Access los redondee al darle formato en el cuadro de texto no modifica el dato real, cálculos posteriores pueden crear falsos resultados.

Por simple seguridad, el redondeo basado en el formato solo se debería utilizar en la presentación de resultados finales.

2 respuestas más de otros expertos

Respuesta

Supongo que el punto que pones es por la configuración regional. Una forma muy sencilla es:

Supongamos que en un cuadro de texto tienes puesto en sus Propiedades-Formato- Numero General y 4 decimales. En otro cuadro de texto le pongo en sus propiedades-Formato-Fijo y dos decimales de forma que si escribo

En texto 8 me pone

En este caso, en el evento Después de actualizar del cuadro de texto Texto 5 le tengo puesto simplemente

Private Sub Texto5_AfterUpdate()
Texto8 = Texto5
End Sub

Y si fuera menos

Enrique, con todo el respeto, deberías pensar las cosas antes de decirlas. Si tengo el formulario donde el citado cuadro de texto sigue teniendo formato fijo y 2 decimales

Cuando pulso el botón

Y el cálculo que hace el botón es

Private Sub Comando14_Click()
Texto8 = Sqr(23.12345) * (12.345) ^ 3
End Sub

¿Te parece poco cálculo?

Respuesta

Revisando mis apuntes encontré esta función elaborada por Dev Ashish.

 ' ********** Code Start **************
'This code was originally written by Dev Ashish
'It is not to be altered or distributed,
'except as part of an application.
'You are free to use it in any application,
'provided the copyright notice is left unchanged.
'
'Code Courtesy of
'Dev Ashish
'
Public Function Round( _
ByVal Number As Variant, NumDigits As Long, _
Optional UseBankersRounding As Boolean = False) As Double
'
' ---------------------------------------------------
' From "Visual Basic Language Developer's Handbook"
' by Ken Getz and Mike Gilbert
' Copyright 2000; Sybex, Inc. All rights reserved.
' ---------------------------------------------------
'
  Dim dblPower As Double
  Dim varTemp As Variant
  Dim intSgn As Integer
  If Not IsNumeric(Number) Then
    ' Raise an error indicating that
    ' you've supplied an invalid parameter.
    Err.Raise 5
  End If
  dblPower = 10 ^ NumDigits
  ' Is this a negative number, or not?
  ' intSgn will contain -1, 0, or 1.
  intSgn = Sgn(Number)
  Number = Abs(Number)
  ' Do the major calculation.
  varTemp = CDec(Number) * dblPower + 0.5
  ' Now round to nearest even, if necessary.
  If UseBankersRounding Then
    If Int(varTemp) = varTemp Then
      ' You could also use:
      ' varTemp = varTemp + (varTemp Mod 2 = 1)
      ' instead of the next If ...Then statement,
      ' but I hate counting on TRue == -1 in code.
      If varTemp Mod 2 = 1 Then
        varTemp = varTemp - 1
      End If
    End If
  End If
  ' Finish the calculation.
  Round = intSgn * Int(varTemp) / dblPower
End Function

Ejemplo de llamada:

¿

? Round(25.5050,2, false) ----- > Redondeo Bancario
25,51

¿

? Round(25.5050,2, true) ---- > Redondeo por abajo
25,5

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas