Redondear centena

Redondear centena

Postby leandro » Sat May 07, 2022 6:31 pm

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
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Redondear centena

Postby leandro » Sat May 07, 2022 6:40 pm

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
 
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Redondear centena

Postby cnavarro » Sat May 07, 2022 8:50 pm

Code: Select all  Expand view

   ? Val( Str( 2525 / 100, 6, 0 ) ) * 100
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Redondear centena

Postby leandro » Sun May 08, 2022 5:58 pm

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
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Redondear centena

Postby gmart1 » Mon May 09, 2022 6:39 am

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.
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Redondear centena

Postby cnavarro » Sat May 14, 2022 1:26 am

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
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Redondear centena

Postby leandro » Sat May 14, 2022 12:22 pm

Excelente amigo, muchísimas gracias :D
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Redondear centena

Postby Euclides » Thu May 19, 2022 3:42 pm

Hola, mas simples...

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

Saludos, Euclides
User avatar
Euclides
 
Posts: 154
Joined: Wed Mar 28, 2007 1:19 pm

Re: Redondear centena

Postby leandro » Fri May 20, 2022 11:04 pm

Euclides, muchas gracias por la ayuda, excelente solución también :D
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 86 guests