Discussion:
calcular multiplos
(demasiado antiguo para responder)
j_lete
2008-12-20 19:44:01 UTC
Permalink
Hola grupo:
Estoy viendo como calcular redondeos de multiplos de un numero (por ejemplo
25).Lo hago proguntado el resto de la división del numero entre 25 ([numero]
Mod 25), y si este es >=50, int(([numero]/25+1))*25 y si no,
int([numero]/25)*25.
El caso es que comparando con las funciones de excel redondear.mas y
redondear.menos, no siempre coinciden los resultados, por lo que no me fío
100% en mi cálculo.
Existen en access estas funciones?
Saludos
Lazar
2008-12-20 20:30:54 UTC
Permalink
Hola
Para redondear mírate la ayuda de la función Round
--
Saludos
Ramon
Post by j_lete
Estoy viendo como calcular redondeos de multiplos de un numero (por ejemplo
25).Lo hago proguntado el resto de la división del numero entre 25 ([numero]
Mod 25), y si este es >=50, int(([numero]/25+1))*25 y si no,
int([numero]/25)*25.
El caso es que comparando con las funciones de excel redondear.mas y
redondear.menos, no siempre coinciden los resultados, por lo que no me fío
100% en mi cálculo.
Existen en access estas funciones?
Saludos
Patxi Sanz
2008-12-22 17:28:18 UTC
Permalink
Yo diría que el resto nunca puede ser mayor que el divisor:

Es decir, el resto que podemos obtener de dividir cualquier número entre 25,
nunca podrá ser 25, ya que con un resto 25 podemos seguir dividiendo.
--
Feliz Navidad y Próspero 2009


Patxi Sanz
patxisanz[ARROBA]yahoo[PUNTO]es
http://es.geocities.com/patxisanz/index.html
Tudela (NA)
j_lete
2008-12-23 19:29:01 UTC
Permalink
Tienes toda la razón.
El ejemplo que he puesto no es correcto en ese punto. Lo que quiero decir es
que pretendo redondear al superior o no dependiendo del resto de la división.
Si es 0, cojo la parte entera del numero dividido entre 25 y lo multiplico
por 25. Si es mayor de 0, a la parte entera de la división entre 25, le sumo
1 y lo multiplico por 25 para redondear al superior. En realidad, si existe
en access algo parecido al redondear.mas (o menos), no tendré que hacer estos
calculos, que como he dicho aunque en el 95% coinciden, me preocupa que no
sea el 100% ya que no quiero perjudicar (ni beneficiar) a nadie.
Saludos
Post by Patxi Sanz
Es decir, el resto que podemos obtener de dividir cualquier número entre 25,
nunca podrá ser 25, ya que con un resto 25 podemos seguir dividiendo.
--
Feliz Navidad y Próspero 2009
Patxi Sanz
patxisanz[ARROBA]yahoo[PUNTO]es
http://es.geocities.com/patxisanz/index.html
Tudela (NA)
Patxi Sanz
2008-12-24 16:43:34 UTC
Permalink
Si sólo es esto:

- Resto = 0 -> Número entero
- Resto > 0 -> ((Número\25) + 1) * 25

También puedes usar Int en la condición:

Function Redondear25(UnNumero)
Dim ResultadoEntero As Long
Dim ResultadoDecimal As Currency

ResultadoDecimal = UnNumero / 25

If Int(ResultadoDecimal) = ResultadoDecimal Then
Redondear25 = UnNumero
Else
ResultadoEntero = UnNumero \ 25
Redondear25 = (ResultadoEntero+ 1) * 25
End If
End Function

Nota: La \ es la división en la que el resultado devuelto no tiene ningún
decimal, mientras que / es la división en la que el resultado devuelve todos
los decimales que puede precisar.

Y si prefieres usar las funciones de Excel, puedes automatizarlo y crear una
función en Access que te sirva de "puente". Eso sí, el usuario deberá tener
Excel instalado para que funcione.
--
Feliz Navidad y Próspero 2009


Patxi Sanz
patxisanz[ARROBA]yahoo[PUNTO]es
http://es.geocities.com/patxisanz/index.html
Tudela (NA)
j_lete
2008-12-24 19:38:01 UTC
Permalink
En efecto tienes toda la razón.
Lo que intentaba decir en mi supuesto es que si el resto es <> de 0, al
entrero de dividir el numero entre 25, le sumo 1 y multiplico por 25. Si es
0, a la parte entera de la división entre 25, la multiplico por 25. El caso
es que esto en la mayoría de los casos da un resultado similar al
redondear.mas y redondear.menos de excel, pero no es 100% fiable.
Post by Patxi Sanz
Es decir, el resto que podemos obtener de dividir cualquier número entre 25,
nunca podrá ser 25, ya que con un resto 25 podemos seguir dividiendo.
--
Feliz Navidad y Próspero 2009
Patxi Sanz
patxisanz[ARROBA]yahoo[PUNTO]es
http://es.geocities.com/patxisanz/index.html
Tudela (NA)
Valentín Playá
2008-12-30 21:43:10 UTC
Permalink
j_lete,

estos problemas de los redondeos me parecen muy interesantes. ¿puedes
decirnos en que casos no coincide tu cálculo con el de Excel y cual
crees que es correcto?. Por favor envia algún ejemplo.

Saludos,

Valentín Playá
Serra GTS
Madrid
**************************************************************************************************************************
Post by j_lete
En efecto tienes toda la razón.
Lo que intentaba decir en mi supuesto es que si el resto es <> de 0, al
entrero de dividir el numero entre 25, le sumo 1 y multiplico por 25. Si es
0, a la parte entera de la división entre 25, la multiplico por 25. El caso
es que esto en la mayoría de los casos da un resultado similar al
redondear.mas y redondear.menos de excel, pero no es 100% fiable.
Post by Patxi Sanz
Es decir, el resto que podemos obtener de dividir cualquier número entre 25,
nunca podrá ser 25, ya que con un resto 25 podemos seguir dividiendo.
--
Feliz Navidad y Próspero 2009
Patxi Sanz
patxisanz[ARROBA]yahoo[PUNTO]es
http://es.geocities.com/patxisanz/index.html
Tudela (NA)
jmmiralles
2008-12-23 12:30:02 UTC
Permalink
Buenos dias j_lete

¿lo que pretendes es calular un múltiplo de un número y si este número es
con decimales calcular su múltiplo inmediatamente superior?

Saludos
Post by j_lete
Estoy viendo como calcular redondeos de multiplos de un numero (por ejemplo
25).Lo hago proguntado el resto de la división del numero entre 25 ([numero]
Mod 25), y si este es >=50, int(([numero]/25+1))*25 y si no,
int([numero]/25)*25.
El caso es que comparando con las funciones de excel redondear.mas y
redondear.menos, no siempre coinciden los resultados, por lo que no me fío
100% en mi cálculo.
Existen en access estas funciones?
Saludos
j_lete
2008-12-23 19:20:02 UTC
Permalink
El superior o el inferior.
Post by jmmiralles
Buenos dias j_lete
¿lo que pretendes es calular un múltiplo de un número y si este número es
con decimales calcular su múltiplo inmediatamente superior?
Saludos
Post by j_lete
Estoy viendo como calcular redondeos de multiplos de un numero (por ejemplo
25).Lo hago proguntado el resto de la división del numero entre 25 ([numero]
Mod 25), y si este es >=50, int(([numero]/25+1))*25 y si no,
int([numero]/25)*25.
El caso es que comparando con las funciones de excel redondear.mas y
redondear.menos, no siempre coinciden los resultados, por lo que no me fío
100% en mi cálculo.
Existen en access estas funciones?
Saludos
j_lete
2008-12-24 19:33:00 UTC
Permalink
En efecto, al superior o al inferior
Post by jmmiralles
Buenos dias j_lete
¿lo que pretendes es calular un múltiplo de un número y si este número es
con decimales calcular su múltiplo inmediatamente superior?
Saludos
Post by j_lete
Estoy viendo como calcular redondeos de multiplos de un numero (por ejemplo
25).Lo hago proguntado el resto de la división del numero entre 25 ([numero]
Mod 25), y si este es >=50, int(([numero]/25+1))*25 y si no,
int([numero]/25)*25.
El caso es que comparando con las funciones de excel redondear.mas y
redondear.menos, no siempre coinciden los resultados, por lo que no me fío
100% en mi cálculo.
Existen en access estas funciones?
Saludos
jmmiralles
2008-12-30 10:01:01 UTC
Permalink
Buenos días j_lete:

te paso un código para que si crees una pequeña aplicación y vayas
comprobando lo que necesitas.

Haz un formulario con dos cajas de texto, a una la llamas "txtAncho" y a la
otra "txtmultiploAncho", y un botón y lo llamas "cmdMultiplo", y en el evento
click del botón copias el código siguiente, incluso puedes comprobar como
actua con el procedimiento paso a paso, espero que te ayude en algo.

Saludos





On Error GoTo Err_cmdMultiplo_Click

Dim ancho As Variant

Dim multiploANCHO As Integer


If IsNull(Me.txtAncho.Value) Then 'comprobamos si hay algun valor en el

campo, en caso de no haberlo

MsgBox "Introduce un valor.", vbInformation, "Ancho" 'lanzamos el

mensaje para introducir un valor

Me.txtAncho.SetFocus 'le mandamos el foco al campo
Exit Sub 'y salimos de la Sub
End If




If IsNull(Me.txtmultiploAncho.Value) Then 'comprobamos si hay algun

valor en el campo, en caso de no haberlo

MsgBox "Introduce un valor.", vbInformation, "Multiplo Ancho" 'lanzamos

el mensaje para introducir un valor


Me.txtmultiploAncho.SetFocus 'le mandamos el foco al campo
Exit Sub 'y salimos de la Sub

End If




ancho = Me.txtAncho.Value
multiploANCHO = Me.txtmultiploAncho.Value



If multiploANCHO = 0 Then 'comprobamos si el multiplo del ancho es 0

MsgBox "Los múltiplos no pueden ser de 0." & Chr(13) & "Introduce un

múltiplo para el Ancho.", vbInformation, "Multiplos"

Me.txtmultiploAncho.SetFocus
Exit Sub


End If

'Este formato extrae los 3 primeros números si necesitas cambia el

formato.
If Format(ancho, "#,###") <> Format(ancho) Then 'el primer format

redondea el número sin decimales a las primeras 3 cifras y el segundo
devuelve el número que hay en el texbox




'comparamos si son distintos, si son distintos es porque llevan decimales


ancho = Mid(Format(ancho), 1, 3) + 1 'extaemos los 3 primeros

caracteres y le sumamos 1 , porque necesitamos el número inmediatamente

superior sin decimales

'MsgBox ancho

End If


If Not IsNumeric(ancho) Then 'comprobamos si no es un número

MsgBox "Introduce un número", vbInformation, "Ancho"
Me.txtAncho.SetFocus
Exit Sub

ElseIf ancho = 0 Then 'comprobamos si es un 0


MsgBox "Introduce un número", vbInformation, "Ancho"
Me.txtAncho.SetFocus
Exit Sub

Else

If IsNumeric(ancho) Then 'comprobamos si es un número



If ancho Mod multiploANCHO = 0 Then 'si el ancho dividido por el

módulo de su multiplo es 0 es porque es ya un multiplo.

MsgBox "El múltiplo del ancho es: " & ancho, vbInformation, "Multiplo

Ancho" 'lo sacamos por mensaje



Else 'en el caso que no sea 0
'creamos un bucle para que itere tantas veces hasta que sea 0 y

lo sacamos por mensaje

Do While ancho Mod multiploANCHO <> 0


ancho = ancho + 1

If ancho Mod multiploANCHO = 0 Then
MsgBox "El múltiplo del ancho es: " & ancho, vbInformation,

"Multiplo Ancho"
End If

Loop


End If
End If
End If

SeguirPorAqui:
Exit Sub

Err_cmdMultiplo_Click:

MsgBox "Se ha producido el error nº: " & Err.Number & " " &
Err.Description, vbInformation, "Aviso"



Resume SeguirPorAqui
Post by j_lete
En efecto, al superior o al inferior
Post by jmmiralles
Buenos dias j_lete
¿lo que pretendes es calular un múltiplo de un número y si este número es
con decimales calcular su múltiplo inmediatamente superior?
Saludos
Post by j_lete
Estoy viendo como calcular redondeos de multiplos de un numero (por ejemplo
25).Lo hago proguntado el resto de la división del numero entre 25 ([numero]
Mod 25), y si este es >=50, int(([numero]/25+1))*25 y si no,
int([numero]/25)*25.
El caso es que comparando con las funciones de excel redondear.mas y
redondear.menos, no siempre coinciden los resultados, por lo que no me fío
100% en mi cálculo.
Existen en access estas funciones?
Saludos
Loading...