FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Redondear un Numero
Posts: 537
Joined: Mon Jan 16, 2006 03:42 PM
Redondear un Numero
Posted: Thu Feb 08, 2024 01: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

Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Redondear un Numero
Posted: Thu Feb 08, 2024 02: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
Posts: 537
Joined: Mon Jan 16, 2006 03:42 PM
Re: Redondear un Numero
Posted: Thu Feb 08, 2024 02: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

Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Redondear un Numero
Posted: Thu Feb 08, 2024 02: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
Posts: 537
Joined: Mon Jan 16, 2006 03:42 PM
Re: Redondear un Numero
Posted: Thu Feb 08, 2024 02: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

Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Redondear un Numero
Posted: Thu Feb 08, 2024 03:04 PM
Amigos, aquí hay una más...
Code (fw): Select all Collapse
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)
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Redondear un Numero
Posted: 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
Posts: 537
Joined: Mon Jan 16, 2006 03:42 PM
Re: Redondear un Numero
Posted: Fri Feb 09, 2024 02:19 AM

Muchas Gracias

Saludos

Continue the discussion