Como puedo hacer un Round() a 0.25?

152 views
Skip to first unread message

ZeRoberto

unread,
Nov 25, 2021, 10:06:59 PM11/25/21
to publicesvfoxpro
Hola a todos

El round por defecto es a 0.5 quiere decir que si tengo 2.5 me redondea a 3 y si es 2.25 me redondea a 2.

Mi pregunta es cómo puedo hacer un round que me redondee de esta forma, si tengo 2.10 me redondee a 2 y si es >= 2.25 me redondee a 3

Saludos 

Ze






ZeRoberto

unread,
Nov 25, 2021, 10:22:34 PM11/25/21
to publicesvfoxpro
Bueno ya lo solucione gracias

Saludos

Ze



Trento

unread,
Nov 25, 2021, 11:29:11 PM11/25/21
to Comunidad de Visual Foxpro en Español
Me imagino cómo lo solucionaste ( IIF( X-INT(X)<= N, INT(X), INT(X)+1), .... ), pero recuérdame no hacer negocios contigo =P

Saludos.

ZeRoberto

unread,
Nov 25, 2021, 11:33:04 PM11/25/21
to publicesvfoxpro
Lo solucione de esta manera, no si sea lo mas optimo pero me solucione el problema

**
Function xRound(tnValue, tnDecimal)
Local lnResult, lnInt, lnDec
   tnDecimal = Iif(Vartype(tnDecimal) == "N", tnDecimal, 0.5)
   lnInt = Int(tnValue)
   lnDec = tnValue - lnInt
   If lnDec >= tnDecimal
      lnResult = Ceiling(tnValue)
    Else
      lnResult = Floor(tnValue)
   EndIf
   Return (lnResult)
EndFunc


Saludos

Ze



--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/f5daa946-c216-4c7f-b73d-ff6e42a21535n%40googlegroups.com.

Trento

unread,
Nov 26, 2021, 12:10:55 AM11/26/21
to Comunidad de Visual Foxpro en Español
Hola, ZeRoberto.

Resulta que yo soy muy flojo para programar. Mi lógica me diría:
- Ok, a partir de N centavos se redondea (hacia arriba o hacia abajo).

Luego entonces, N es una constante (debiera de, de lo contrario, el usuario definiría a N que ahora sería una variable, y ojo, eso para mi ya sería un capricho de usuario desde el punto de vista de programación). X (el valor absoluto) es la variable.
Si aprovechamos el lenguaje y su abstracción, sería:
SI 2.25 - el entero de 2.25 (2) es menor o igual a tal, el valor será el entero de 2.25 (2), de lo contrario será el entero de 2.25 + 1 (2+1)

Saludos.

ZeRoberto

unread,
Nov 26, 2021, 12:23:56 AM11/26/21
to publicesvfoxpro
Amigo Trento

No analice mucho tu código, pero creo que es lo mas sencillo y óptimo, yo lo hice desarrolle de esa manera porque necesitaba solucionarlo ya, y como ya conocía Floor y Ceiling no me hice muchas bolas como se dice acá en Peru, se que se puede optimizar el codigo, asi que no quería romperme el coco.

Saludos

Ze





Trento

unread,
Nov 26, 2021, 12:32:50 AM11/26/21
to Comunidad de Visual Foxpro en Español
Hombre, no te apures.
Que a todos nos pasa el teclear 10 lineas de código cuando se puede hacer en una sola o las menos posibles.
Pero haz la prueba desde la ventana de comandos:

X = 2.25
N = .25 
?IIF( X-INT(X)<= N, INT(X), INT(X)+1 )

Saludos.

ZeRoberto

unread,
Nov 26, 2021, 12:36:12 AM11/26/21
to publicesvfoxpro
Excelente amigo Trento funciona de maravillas

Gracias

Saludos

Ze


ZeRoberto

unread,
Nov 26, 2021, 12:39:57 AM11/26/21
to publicesvfoxpro
Quedaria asi

Function xRound(tnValue, tnDecimal)
Local lnResult, lnInt, lnDec
   tnDecimal = Iif(Vartype(tnDecimal) == "N", tnDecimal, 0.5)
   Return (IIF( tnValue-INT(tnValue)<= tnDecimal, INT(tnValue), INT(tnValue) + 1 ))
EndFunc

Gracias

Saludos

Ze



ZeRoberto

unread,
Nov 26, 2021, 1:20:25 AM11/26/21
to publicesvfoxpro
Bueno si se preguntan para que necesite esta función, bueno estuve en la necesidad de añadir la opción de redimensionar a una clase que deje actualizar hace tiempo, y por motivos de un cliente quería que tenga esta opción tuve que retomar nuevamente la clase.

Para los que desean descargar:

Saludos

Ze





Luis Maria Guayan

unread,
Nov 26, 2021, 9:28:41 AM11/26/21
to Comunidad de Visual Foxpro en Español
Creo que esto es lo que buscas:

-- Redondear a X centavos hacia arriba o hacia abajo --
https://comunidadvfp.blogspot.com/2008/05/redondear-x-centavos-hacia-arriba-o.html

También otras opciones en el Blog de la Comunidad




Luis María Guayán
Tucumán, Argentina
_______________________________

Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com
Reply all
Reply to author
Forward
0 new messages