Redondear un Numero

Redondear un Numero

Postby jbrita » Thu Feb 08, 2024 1:22 am

Hola colegas, necesito redondear numero
ejemplo
del 1 al 5 ejemplo $ 785 que quede en $780
del 6 al 9 ejemplo $ 786 que quede en $ 790
y si es 0 ejemplo $ 780 que quede en $ 780
Saludos
jbrita
 
Posts: 486
Joined: Mon Jan 16, 2006 3:42 pm

Re: Redondear un Numero

Postby Armando » Thu Feb 08, 2024 2:37 am

José:

Apóyate en el operador %, te devuelve el sobrante o remanente.
ejemplo, puedes usar

785 % 10 => 5 el sobrante es menor o igual a 5 le restas este sobrante a 785 - 5 = 780
786 % 10 => 6 el sobrante es mayor a 5 aumentas el resultado de 10 - 6 = 4 y te quedará 790

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3061
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Redondear un Numero

Postby jbrita » Thu Feb 08, 2024 2:06 pm

Gracias Armando, cree esta funcion

FUNCTION Redondear(numero)
*---------------------------
Local val_num := Val(SubStr(Str(numero,9),-1))
Local Valor := 0
If val_num>=1 .AND. val_num<=5
valor = numero - val_num
ElseIf val_num>= 6 .AND. val_num<= 9
valor = numero + (10-val_num)
Else
valor:=numero
Endif

Return(valor)

Pero no se si se podria mejorar

saludos
jbrita
 
Posts: 486
Joined: Mon Jan 16, 2006 3:42 pm

Re: Redondear un Numero

Postby Armando » Thu Feb 08, 2024 2:33 pm

José:

Creo que esto puede funcionar

FUNCTION Redondear(nValor)
IF nValor % 10 <= 5
nValor := nValor - (nValor % 10)
ELSE
nValor := nValor + (10 - nValor % 10)
ENDIF
RETURN(nValor)

Pruébalo, los hice de salida y asumo que en valor no hay fracciones decimales

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3061
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Redondear un Numero

Postby jbrita » Thu Feb 08, 2024 2:42 pm

Gracias armando, quedo muy bien..
FUNCTION Redondear(nValor)
IF nValor % 10 <= 5
nValor := nValor - (nValor % 10)
ELSE
nValor := nValor + (10 - nValor % 10)
ENDIF
RETURN(Round(nValor,0))

saludos
jbrita
 
Posts: 486
Joined: Mon Jan 16, 2006 3:42 pm

Re: Redondear un Numero

Postby Willi Quintana » Thu Feb 08, 2024 3:04 pm

Amigos, aquí hay una más...
Code: Select all  Expand view
Function FRound( x, y )
Local nDeci := 2  // error en el compilador
Default y := 2
nDeci := Set(3, y )
If x >= 0
   x := Val( Str( Int( x * 10 ** y + 0.5000001 ) ) ) / 10 ** y
Else
   x := Val( Str( Int( x * 10 ** y - 0.5000001 ) ) ) / 10 ** y
Endif
Set(3, nDeci )  // set decimal
Return(x)
 
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Redondear un Numero

Postby Armando » Thu Feb 08, 2024 11:57 pm

José:

Pasando un parámetro más a la función, en lugar de la constante 10, y con pequeños ajustes
podrás redondear a Unidades, Decenas, Centenas, etc etc.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3061
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Redondear un Numero

Postby jbrita » Fri Feb 09, 2024 2:19 am

Muchas Gracias
Saludos
jbrita
 
Posts: 486
Joined: Mon Jan 16, 2006 3:42 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 87 guests