** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Redondeo mas de dos decimales a dos decimales
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoRedondeo mas de dos decimales a dos decimales

 Responder Responder
Autor
Mensaje
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Tema: Redondeo mas de dos decimales a dos decimales
    Enviado: 17/Julio/2021 a las 10:37
Buenas.
La verdad no se como hacerlo y llevo buscando mucho rato y probando funciones que encuentro.
Lo que quiero

Si tengo por ejemplo 33,3333  Que me lo redondee a inmediatamente superior a dos decimales o sea 33,34

55,545  a 55,55
11,19  a 11,20
99,995  a 100,00
99,95 a 99,96
66,6666 a 66,67
11,022 a 11,03
etc....


Me imagino que se podrá, pero ni se, ni encuentro nada, o no he sabido buscar bien


Saludos


Editado por rokoko - 17/Julio/2021 a las 13:38
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14017
Enlace directo a este mensaje Enviado: 17/Julio/2021 a las 11:56
No hay una función que haga eso en Access. Tendrás que hacértela tú .... y para ello lo primero es tener claros los pasos que tienes que dar para conseguirlo.

Con 'lápiz y papel' ... Wink  ... ¿Cómo lo harías?
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
javier.mil Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Agosto/2005
Localización: España
Estado: Sin conexión
Puntos: 4830
Enlace directo a este mensaje Enviado: 17/Julio/2021 a las 12:42
y si por ejemplo es 100,001 lo cambias a 100,01 ?







 


Editado por javier.mil - 17/Julio/2021 a las 15:36
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 17/Julio/2021 a las 13:57
Dandole vueltas a salido esto, parece que funciona, pero quizas hay una forma mas facil de hacerlo...probarla a ver que os pareceBig smile

'****************************************************************************
''!!!Si es vba quizas la coma sea punto y Valor habra que pasarlo ya con coma, ya que esta funcion nos saca la posicion de la coma, con Replace!!!!
'Funcion que nos deja 2 decimales si hay mas de 2,al inmediatamente superior
'Ejemplo
'55,545  a 55,55
'11,19  a 11,20
'99,995  a 100,00
'99,95 a 99,96
'66,6666 a 66,67
'11,022 a 11,03
Function RedondeoUNAI(Valor As Variant)
'DecimalesUnai Me.Texto0
Dim varPosicionDecimales As String
varPosicionDecimales = InStr(Valor, ",")  'Nos saca la posicion de la coma
'MsgBox varPosicionDecimales

Dim varLongitud As String  'Nos saca la longitud total
varLongitud = Len(Valor)

Dim varNumDecimales As String  'Numero de decimales que hay
varNumDecimales = varLongitud - varPosicionDecimales

'If varPosicionDecimales = 0 Then
'MsgBox "Numero entero, sin decimales"
'Else
'MsgBox varNumDecimales & " Decimales"
'End If

If varNumDecimales > 2 Then
Dim varResultado As Double
varResultado = Valor + 0.01
'MsgBox varResultado  'Faltaria dejar solo dos decimales(dos caracteres a la derecha de la coma)

'MsgBox InStr(varResultado, ",") + 2 'Posicion de la coma, mas 2 decimales
'MsgBox Left(varResultado, InStr(varResultado, ",") + 2)  'Dejo todo lo de la izquierda con dos decimales unicamente
RedondeoUNAI = Left(varResultado, InStr(varResultado, ",") + 2)
Else
'MsgBox Valor
RedondeoUNAI = Valor
End If

MsgBox RedondeoUNAI

End Function
'*****************************************************************************************


Editado por rokoko - 17/Julio/2021 a las 14:01
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 17/Julio/2021 a las 14:07
La aterior a partir de 3 numero enteros daba incorrecto, esta creo que si..

'****************************************************************************
'!!!Si es vba quizas la coma sea punto y Valor habra que pasarlo ya con coma, ya que esta funcion nos saca la posicion de la coma, con Replace!!!!
'Funcion que nos deja 2 decimales si hay mas de 2,al inmediatamente superior
'Ejemplo
'55,545  a 55,55
'11,19  a 11,20
'99,995  a 100,00
'99,95 a 99,96
'66,6666 a 66,67
'11,022 a 11,03
Function RedondeoUNAI(Valor As Variant)
'DecimalesUnai Me.Texto0
Dim varPosicionDecimales As String
varPosicionDecimales = InStr(Valor, ",")  'Nos saca la posicion de la coma
'MsgBox varPosicionDecimales

Dim varLongitud As String  'Nos saca la longitud total
varLongitud = Len(Valor)

Dim varNumDecimales As String  'Numero de decimales que hay
varNumDecimales = varLongitud - varPosicionDecimales

'If varPosicionDecimales = 0 Then
'MsgBox "Numero entero, sin decimales"
'Else
'MsgBox varNumDecimales & " Decimales"
'End If

'If varNumDecimales > 2 Then  'Con este falla
If varPosicionDecimales <> 0 Then
Dim varResultado As Double
varResultado = Valor + 0.01
'MsgBox varResultado  'Faltaria dejar solo dos decimales(dos caracteres a la derecha de la coma)

'MsgBox InStr(varResultado, ",") + 2 'Posicion de la coma, mas 2 decimales
'MsgBox Left(varResultado, InStr(varResultado, ",") + 2)  'Dejo todo lo de la izquierda con dos decimales unicamente
RedondeoUNAI = Left(varResultado, InStr(varResultado, ",") + 2)
Else
'MsgBox Valor
RedondeoUNAI = Valor
End If

MsgBox RedondeoUNAI

End Function
'*****************************************************************************************


Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14017
Enlace directo a este mensaje Enviado: 17/Julio/2021 a las 15:02
Es un camino .... pero podrías buscar por este otro (y además así lo dejas para los decimales que necesites, no solo para dos):

- a la rutina le pasas el número a tratar y el número de decimales que quieres (55,545 y 2)
- coges el numero y pasas a enteros los decimales que vayas a tratar:
    55,545 -> 5554,5
- te quedas con la parte entera del numero
    5554
- le sumas la unidad del redondeo hacia arriba que quieres hacer
    5554 + 1 = 5555
- vuelves a poner el numero con decimales:
    5555 / 100 = 55,55

Antes de tocar nada, pruébalo conceptualmente.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
javier.mil Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Agosto/2005
Localización: España
Estado: Sin conexión
Puntos: 4830
Enlace directo a este mensaje Enviado: 17/Julio/2021 a las 15:15
Mira si esta funcion de Emilio te puede servir



Public Function Redondeo(dblValor As Double, Optional bytDecimales As Byte =
0)

'************************************************* ******************************
'* Redondeo
'* función que redondea un valor, pasado como argumento, con un número de
'* Argumentos: dblValor
'* bytDecimales = > (opcional) número de decimales a redondear
'* uso: Redondeo, 2
'* Si utilizas este código, respeta la autoría y los créditos
'* ESH 30/07/00 18:30
'* ESH 26/08/09 17:54 número de decimales opcional
'************************************************* ******************************

If Int(dblValor * 10 ^ bytDecimales + 0.5) > Int(dblValor * 10 ^
bytDecimales) Then
Redondeo = Int(dblValor * 10 ^ bytDecimales + 0.5) / 10 ^ bytDecimales
Else
Redondeo = Int(dblValor * 10 ^ bytDecimales) / 10 ^ bytDecimales
End If

End Function ' Redondeo


Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 17/Julio/2021 a las 17:23
Publicado originalmente por javier.mil javier.mil escribió:

Mira si esta funcion de Emilio te puede servir


Esta muy bien, si es 55,556  redondea a 55.56, y si es 55.554 redondea a 55.55. Con este 100,995 lo deja en 100
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 17/Julio/2021 a las 20:41
Las dos funciones con alguna mejora, parece que van bien..

'****************************************************************************
'!!!Si es vba quizas la coma sea punto y Valor habra que pasarlo ya con coma, ya que esta funcion nos saca la posicion de la coma, con Replace!!!!
'Funcion que nos deja 2 decimales si hay mas de 2,al inmediatamente superior
'Ejemplo
'55,545  a 55,55
'11,19  a 11,20
'99,995  a 100,00
'99,95 a 99,96
'66,6666 a 66,67
'11,022 a 11,03
Function RedondeoUNAI(Valor As Variant)
'DecimalesUnai Me.Texto0
Dim varPosicionDecimales As Integer
varPosicionDecimales = InStr(Valor, ",")  'Nos saca la posicion de la coma
'MsgBox varPosicionDecimales

Dim varLongitud As Integer  'Nos saca la longitud total
varLongitud = Len(Valor)

Dim varNumDecimales As Integer  'Numero de decimales que hay
varNumDecimales = varLongitud - varPosicionDecimales

'If varPosicionDecimales = 0 Then
'MsgBox "Numero entero, sin decimales"
'Else
'MsgBox varNumDecimales & " Decimales"
'End If

'If varNumDecimales > 2 Then  'Con este falla
If varPosicionDecimales <> 0 And varNumDecimales > 2 Then
Dim varResultado As Double
varResultado = Valor + 0.01
'MsgBox varResultado  'Faltaria dejar solo dos decimales(dos caracteres a la derecha de la coma)

'MsgBox InStr(varResultado, ",") + 2 'Posicion de la coma, mas 2 decimales
'MsgBox Left(varResultado, InStr(varResultado, ",") + 2)  'Dejo todo lo de la izquierda con dos decimales unicamente
RedondeoUNAI = Left(varResultado, InStr(varResultado, ",") + 2)
Else
'MsgBox Valor
RedondeoUNAI = Valor
End If

'MsgBox RedondeoUNAI

End Function






Public Function RedondeoXX(Valor As Variant, NumDecimales As Integer, NumDivision As Integer)
'Le pasamos el numero, le pasamos cuantos decimales cogemos, le pasamos 10 si 1 decimal, 100 si 2 decimales,1000 si 3 decimales etc...segun decimales
'Ejemplo:   RedondeoXX Me.nombreControl,2,100
'!!!Si es vba quizas la coma sea punto y Valor habra que pasarlo ya con coma, ya que esta funcion nos saca la posicion de la coma, con Replace!!!!
'Funcion que nos deja X decimales si hay mas de X,al inmediatamente superior
'55,545  a 55,55
'11,19  a 11,20
'99,995  a 100,00
'99,95 a 99,96
'66,6666 a 66,67
'11,022 a 11,03

Dim varPosicionDecimales As Integer
varPosicionDecimales = InStr(Valor, ",")  'Nos saca la posicion de la coma
'MsgBox varPosicionDecimales

Dim varLongitud As Integer  'Nos saca la longitud total
varLongitud = Len(Valor)

Dim varNumDecimales As Integer  'Numero de decimales que hay
varNumDecimales = varLongitud - varPosicionDecimales
'MsgBox varNumDecimales

If varPosicionDecimales <> 0 And varNumDecimales > 2 Then
'If varNumDecimales > 2 Then
'MsgBox ">2"
'Dim varResultado As Double  'Desplazo la coma X a la derecha, le quito la coma, le sumo 1 y     le vuelvo a poner la coma X esto ultimo falta
RedondeoXX = (Replace(Left(Valor, varPosicionDecimales + NumDecimales), ",", "") + 1) / NumDivision


Else
RedondeoXX = Valor
End If

'MsgBox RedondeoXX
End Function



Editado por rokoko - 17/Julio/2021 a las 20:41
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3859
Enlace directo a este mensaje Enviado: 17/Julio/2021 a las 20:51
¿No vale la función ROUND?

Luis
El Búho es un pajarraco
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 17/Julio/2021 a las 21:24
Publicado originalmente por lbauluz lbauluz escribió:

¿No vale la función ROUND?

Luis

La función Round no redondea como estoy intentando, siempre para arriba quiero el redondeo


qrySumaTabla1
Numero A B ConRound
55,311 55,32 55,32 55,310001373291
96,33 96,33 96,33 96,3300018310547
33,3333 33,34 33,34 33,3300018310547
10 10 10 10
5 5 5 5
1,1 1,1 1,1 1,10000002384186
55,545 55,55 55,55 55,5400009155273
11,19 11,19 11,19 11,1899995803833
99,995 100,00 100 100
99,95 99,95 99,95 99,9499969482422
66,6666 66,67 66,67 66,6699981689453
11,022 11,03 11,03 11,0200004577637

Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 18/Julio/2021 a las 10:30
Hola!

Poniendo en el origen del control esta fórmula podría conseguirlo:-


=Int(-100 * [Tucampo]) / -100
Un Saludo.
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14017
Enlace directo a este mensaje Enviado: 18/Julio/2021 a las 10:51
A ver chicos  ... ¿y no será mejor que Rokoko -que ya lleva con nosotros varios años- aprenda y desarrolle su propia función en vez de darle una cosa ya hecha?

Enseñar a pescar en vez de dar el pez ... que dicen los chinos.



Además, no es un redondeo al uso, por lo que he entendido quiere que todo 'suba' al siguiente decimal excepto el cero.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 18/Julio/2021 a las 18:14
Publicado originalmente por mounir mounir escribió:

Hola!

Poniendo en el origen del control esta fórmula podría conseguirlo:-


=Int(-100 * [Tucampo]) / -100

ClapClap Una sola linea y aparentemente "simple".

Publicado originalmente por Mihura Mihura escribió:

A ver chicos  ... ¿y no será mejor que Rokoko -que ya lleva con nosotros varios años- aprenda y desarrolle su propia función en vez de darle una cosa ya hecha?

Enseñar a pescar en vez de dar el pez ... que dicen los chinos.



Además, no es un redondeo al uso, por lo que he entendido quiere que todo 'suba' al siguiente decimal excepto el cero.

Por muchos años que lleve, nunca llegare a hacer las cosas tan finas como vosotrosWink
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 21/Julio/2021 a las 09:42
Se puede cerrar.

Muchas gracias a todos.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable