Access - Redondear al entero inmediatamente superior

 
Vista:

Redondear al entero inmediatamente superior

Publicado por Omar (66 intervenciones) el 28/10/2009 04:29:40
Hola compañeros de LWP, ¿alguien me podría ayudar por la siguiente cuestión?, tengo la siguiente espresión en un formulario P=1,10*X donde "X" es la variable que yo introduciré manualmente en un control de ese mismo formulario.

Mi pregunta es la que sigue: ¿Cómo puedo redondear al valor entero inmediatamente superior el resultado de dicha expresión?

Alguna idea?

Gracias desde ya...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Redondear al entero inmediatamente superior

Publicado por jose (830 intervenciones) el 28/10/2009 08:05:34
en el evento ---- despues de actualizar del cuaDRO DE TEXTO donde intoduces la x y que le llevapor nombre x


x= int(x+.5 )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Redondear al entero inmediatamente superior

Publicado por Omar (66 intervenciones) el 28/10/2009 13:08:53
Gracias Jose!, pero lamento decirte que no me funciona me marca error el código, ... ¿que puedo estar haciendo mal?, es una mdb muy sencilla con una tabla y un formulario... tal vez prefieras verla, ¿Puedo enviártela?

Gracias desde ya
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Redondear al entero inmediatamente superior

Publicado por Jefferson (3 intervenciones) el 29/10/2009 03:33:46
Hola Omar

Con esta funcion puedes redondear de cinco(5) en cinco(5), pero podrias adaptarla a lo que pretendes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Function JJJT_Redondeo(Valor As Double) As Long
'Verificamos que el campo no este nulo, ni en cero(0)
 If Valor = 0 Then
    MsgBox "debe incluir un valor numerico en el campo " & Chr(13) & _
    "y este debe ser diferente de cero(0)", vbInformation, "Aviso"
   Exit Function
 End If
'Despues redondeo el valor y recojo el ultimo numero
'si detecto que es 0(cero), dejo el valor intacto
        If Right(Round(Valor, 0), 1) = 0 Then
            JJJT_Redondeo = Valor
            Exit Function
        End If
'Ahora bien, reviso que el ultimo valor este entre 0 y 5
If Right(Round(Valor, 0), 1) > 0 And Right(Round(Valor, 0), 1) < 5 Then
'si es asi
'lo redondeo a cinco
    JJJT_Redondeo = Left(Round(Valor, 0), (Len(Round(Valor, 0)) - 1)) & 5
Else
'de lo contrario le aumento un digito y lo llevo a entero 0
    JJJT_Redondeo = Left(Round(Valor, 0), (Len(Round(Valor, 0)) - 1)) + 1 & 0
End If
End Function

En este enlace puedes ver como se usa
http://4313523533579166434-a-1802744773732722657-s-sites.googlegroups.com/site/jjjt1973/Home/agenda-de-cumpleanos/Redondear.rar?
Desde Venezuela
Jefferson
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Redondear al entero inmediatamente superior

Publicado por jose  (830 intervenciones) el 29/10/2009 08:14:12
enviame el formulario si deseas y veré como hacer lo que pretendes
[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Redondear al entero inmediatamente superior

Publicado por mi menda (1111 intervenciones) el 29/10/2009 10:35:56
Hola:

P=Round((1,10*X )+0,5)

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Redondear al entero inmediatamente superior

Publicado por Omar (66 intervenciones) el 30/10/2009 02:07:00
Mi menda, Gracias!!... me funciona tu expresión!, en el campo correspondiente a "P" he puesto en el origen de control esa expresión =Round((1,10*X )+0,5)
y es cierto, funciona correctamente.

Sin embargo, me gustaría que ese valor que aparece en "P" se almacenara en su campo correspondiente en la tabla de origen, no se si es correcto lo que he hecho pero he borrado del origen de control esa expresión... y la he colocado como evento en "Despues de actualizar", pero sucede que el compilador me da un error de sintáxis que por el momento no se corregir. ¿Podrías ayudarme?. Tal vez necesites que te envie mi ejercicio, es una base de datos muy sencilla.

Este es mi e-mail [email protected]

Gracias desde ya

Omar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Redondear al entero inmediatamente superior

Publicado por mi menda (1111 intervenciones) el 30/10/2009 03:13:50
Hola:

Sí no existe alguna justificación, los campos calculados no se guardan en las tablas, porque cada vez que veas el registro en el form, el campo ya te muestra el valor sín necesidad de tenerlo guardado, ahorrando con ello capacidad en la bbdd. Cada vez que necesites ese valor, ya sea en una consulta o en un informe, se crea un campo con la misma expresión y listo.

Además puede suceder que sí en alguna parte de la bbdd cambías algún valor, al abrir un form no se actualizaría ese campo hasta que no se ejecute el evento después de actualizar, mientras que con un campo calculado siempre estará actualizado.

De todas formas sí lo quieres guardar lo más seguro es que te de el error por las comas, ya que en VBA el separador decimal es el punto (ya sabes... esas cosas raras que tienen los anglosajones).

Ah!!.... otra cosa, sí hubieras puesto en el buscador "redondear" o algo similar, habrías encontrado está expresión para redondear hacia arriba, que ahora mismo no me acuerdo de que autor es, pero que se me quedo grabada.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Redondear al entero inmediatamente superior

Publicado por Omar (66 intervenciones) el 30/10/2009 03:20:18
Gracias Mi Menda; tu explicación me ha encantado... ahorita mismo me pongo a comprobar...

Muchas gracias por tu ayuda

Saludos
Omar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ATENCIÓN!! Curiosidad o error en la función "Round

Publicado por Omar (66 intervenciones) el 30/10/2009 16:13:03
Mi Menda... comprobé de nuevo tu función y en la mayor parte de los casos cumple perfectamente... pero hay determinados valores para los cuales no es segura, a continuación muestro ejemplos...

10*1,1=11 redondea a 12
20*1,1=22 lo deja igual, en 22
30*1,1=33 redondea a 34
40*1,1=44 lo deja igual en 44
50*1,1=55 redondea a 56

Al introducir valores que sean múltiplos de 10, como 20,30,40,50,etc... los valores resultantes de la función seran enteros... 11,22,33,44 con lo cual supongo que a la función se planteará la duda de dejar el valor tal y como está o redondear a la unidad siguiente superior.

Al multiplicar por las decenas impares 10, 30 , 50 etc redondea una unidad por encima

Al multiplicar por las decenaas pares 20, 40, 60 etc deja el valor tal y como está.

¿A que se puede deber esta curiosidad?

La verdad es que ante la duda, prefiero que redondee una unidad por encima, como hace con las decenas impares.

¿EXISTE FUNCIÓN QUE CUMPLA IGUALMENTE PARA TODOS LOS VALORES?

Muchas gracias de antemano
Omar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ATENCIÓN!! Curiosidad o error en la función

Publicado por jose  (8 intervenciones) el 30/10/2009 17:18:16
X=entero(x+.5)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ATENCIÓN!! Curiosidad o error en la función

Publicado por Omar (66 intervenciones) el 30/10/2009 17:48:32
Hola Jose, gracias por tu rápida contestación... he probado con tu función y la he insertado en el evento después de actualizar, pero sucede lo mismo que le comentaba a Mi Menda:

Hay determinados valores para los cuales no es segura, a continuación muestro ejemplos...

10*1,1=11 redondea a 12
20*1,1=22 lo deja igual, en 22
30*1,1=33 redondea a 34
40*1,1=44 lo deja igual en 44
50*1,1=55 redondea a 56

Al introducir valores que sean múltiplos de 10, como 20,30,40,50,etc... los valores resultantes de la función seran enteros... 11,22,33,44 con lo cual supongo que a la función se planteará la duda de dejar el valor tal y como está o redondear a la unidad siguiente superior.

Al multiplicar por las decenas impares 10, 30 , 50 etc redondea una unidad por encima

Al multiplicar por las decenaas pares 20, 40, 60 etc deja el valor tal y como está.

¿A que se puede deber esta curiosidad?

La verdad es que ante la duda, prefiero que redondee una unidad por encima, como hace con las decenas impares.

¿EXISTE FUNCIÓN QUE CUMPLA IGUALMENTE PARA TODOS LOS VALORES?

Muchas gracias de antemano
Omar

[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ATENCIÓN!! Curiosidad o error en la función

Publicado por mi menda (1111 intervenciones) el 30/10/2009 19:53:04
Hola:
Pues si...., parece ser que Round() redondea como le da la gana, la funcion Int() no vale porque lo que hace es convertir un número a entero, es decir 17,20 y 17,90 siempre dará como resultado 17,00, es decir 17,10+0,5=17,60 y extraerá la parte entera que es 17
Supongo que ya habrás hecho bastantes pruebas, y solo habrás encontrado el error en los multiplos de 10.
Entonces solo redondeamos sí el número no es multiplo de10

Campo=Iif(0=X Mod 10,X*1.1,Round((X*1.1)+0.5))

A ver sí es definitivo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ATENCIÓN!! Curiosidad o error en la función

Publicado por Omar (66 intervenciones) el 30/10/2009 20:50:58
Gracias de nuevo Mi Menda... no se donde está el origen de mi fallo pero dónde debería aparecerme el resultado me aparece un fantasmagórico: #¿Nombre?

Seguiré intentandolo, gracias por tu ayuda... espero nuevas sugerencias si las consideras oportunas

Gracias, atentamete
Omar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ATENCIÓN!! Curiosidad o error en la función

Publicado por mi menda (1111 intervenciones) el 30/10/2009 21:46:10
Otra cosa para no eternizarnos, cuando te de error, pon lo que has puesto y donde(en VBA ,en origen de control, evento,etc..); vamos.... que esto que te digo es de cajón....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ATENCIÓN!! Curiosidad o error en la función

Publicado por mi menda (1111 intervenciones) el 30/10/2009 21:47:22
Otra cosa para no eternizarnos, cuando te de error, pon lo que has puesto y donde(en VBA ,en origen de control, evento,etc..); vamos.... que esto que te digo es de cajón....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ATENCIÓN!! Curiosidad o error en la función

Publicado por mi menda (1111 intervenciones) el 30/10/2009 21:40:16
Hola:
Era para VBA, sí es como origen de un control:

=SiInm(0=X Mod 10;X*1,1;Redondear((X*1,1)+0,5))

Supongo que X es el nombre de un campo.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar