Page 1 of 1

Redondear centena

PostPosted: Sat May 07, 2022 6:31 pm
by leandro
Hola buenas tardes ?

De nuevo por aquí molestando, surge la necesidad de poder hacer el redondeo a la centena, con el fin de evitar problemas con el cambio cuando pagan en efectivo.

E intentando con la función round(), pero esta parece que aplica solo para los decimales.

Ejemplo:
Total a pagar $1.257
Debe quedar $1.200

Total a pagar $5.856
Debe quedar $5.800

De antemano gracias

Re: Redondear centena

PostPosted: Sat May 07, 2022 6:40 pm
by leandro
Ya encontré la solución jejejejeje

Code: Select all  Expand view

#include "fivewin.ch"
FUNCTION Main()
Local nRedondear := 1859
Local nRodondeado := round(nRedondear,-2)
msginfo(nRodondeado)
Return nil
 

Re: Redondear centena

PostPosted: Sat May 07, 2022 8:50 pm
by cnavarro
Code: Select all  Expand view

   ? Val( Str( 2525 / 100, 6, 0 ) ) * 100
 

Re: Redondear centena

PostPosted: Sun May 08, 2022 5:58 pm
by leandro
Cristobal, muchas gracias por responder.

Me surge una idea? podemos adaptar esa funciono que hiciste para que aproxime a 50 y no a 100.

Ejemplo:
$4785 -> $4800
$4727 -> $4750
$4611 -> $4600
$4673 -> $4650

De antemano gracias

Re: Redondear centena

PostPosted: Mon May 09, 2022 6:39 am
by gmart1
Hola, puedes probar usando el resto de la división.
Code: Select all  Expand view
nAproximar := 50
nRedondear := 4785
nResto := nRedondear % nAproximar
? nRedondear - IF ( nResto < (nAproximar / 2), nResto, - (nResto - nAproximar) )

No lo he probado, pero creo que puede funcionar.
Un saludo.

Re: Redondear centena

PostPosted: Sat May 14, 2022 1:26 am
by cnavarro
Code: Select all  Expand view

function Main()

   local n
   n := 4785
   ? if( Round( n / 100, 0 ) > Int( n / 100 ), Round( n / 100, 0 ) * 100, Round( n / 100, 0 ) * 100 + 50 )
   n := 4727
   ? if( Round( n / 100, 0 ) > Int( n / 100 ), Round( n / 100, 0 ) * 100, Round( n / 100, 0 ) * 100 + 50 )

Return nil
 

Re: Redondear centena

PostPosted: Sat May 14, 2022 12:22 pm
by leandro
Excelente amigo, muchísimas gracias :D

Re: Redondear centena

PostPosted: Thu May 19, 2022 3:42 pm
by Euclides
Hola, mas simples...

nAproximar := 50
nRedondear := 47085
? round(nRedondear / nAproximar, 0) * nAproximar

Saludos, Euclides

Re: Redondear centena

PostPosted: Fri May 20, 2022 11:04 pm
by leandro
Euclides, muchas gracias por la ayuda, excelente solución también :D