Redondeo mas de dos decimales a dos decimales |
Responder |
Autor | |||||||||||||||||||||||||||||||||||||||||||||||||||||
rokoko
Colaborador Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 3062 |
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 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14017 |
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' ... ... ¿Cómo lo harías?
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
javier.mil
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4830 |
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 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
rokoko
Colaborador Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 3062 |
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 parece
'**************************************************************************** ''!!!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 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
rokoko
Colaborador Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 3062 |
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 '***************************************************************************************** |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14017 |
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.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
javier.mil
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4830 |
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 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
rokoko
Colaborador Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 3062 |
Enviado: 17/Julio/2021 a las 17:23 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
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
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
rokoko
Colaborador Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 3062 |
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 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
lbauluz
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3859 |
Enviado: 17/Julio/2021 a las 20:51 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
¿No vale la función ROUND?
Luis
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
El Búho es un pajarraco
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
rokoko
Colaborador Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 3062 |
Enviado: 17/Julio/2021 a las 21:24 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
La función Round no redondea como estoy intentando, siempre para arriba quiero el redondeo
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
mounir
Colaborador Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6479 |
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.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14017 |
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.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
rokoko
Colaborador Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 3062 |
Enviado: 18/Julio/2021 a las 18:14 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Una sola linea y aparentemente "simple".
Por muchos años que lleve, nunca llegare a hacer las cosas tan finas como vosotros.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
rokoko
Colaborador Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 3062 |
Enviado: 21/Julio/2021 a las 09:42 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Se puede cerrar.
Muchas gracias a todos.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |