Página 1 de 1

Redondeo Bancario

Publicado: Mié Mar 07, 2018 7:24 pm
por ramonzea
Hola:
Existe en Habour, MiniGW o Xailer, una función para el redondeo bancario?
Cambia la forma de redondear según la siguiente liga:
https://msdn.microsoft.com/es-mx/librar ... -snippet-2

Gracias de antemano.

Re: Redondeo Bancario

Publicado: Vie Mar 09, 2018 4:03 pm
por jvtecheto
Hola Ramon:

Una funcion podria ser esta:

No la he pulido mucho pero creo que funciona a partir de 0,5 redondea al alza que creo que es lo que buscas.

Código: Seleccionar todo

FUNCTION RoundBan( nCantidad )

   LOCAL nEntero, nDecimal, nPos
   LOCAL cNumero

   cNumero :=Str(nCantidad)
   nPos := RAt(".",cNumero)

   nEntero := Val( SubStr(cNumero,1,nPos-1) )
   nDecimal := Val( SubStr(cNumero,nPos+1,1 ) )

     if (ndecimal >=5)
       nDecimal := 1
      Else
         nDecimal := 0
      Endif

   nCantidad := nEntero + nDecimal

RETURN nCantidad
Saludos

Jose

Re: Redondeo Bancario

Publicado: Vie Mar 09, 2018 7:51 pm
por jvtecheto
Perdon , no habia visto que 100.5 debe ser 100

creo que asi...

Código: Seleccionar todo

FUNCTION RoundBan( nCantidad )

   LOCAL nEntero, nDecimal, nPos
   LOCAL cNumero

   cNumero :=Str(nCantidad)
   nPos := RAt(".",cNumero)

   nEntero := Val( SubStr(cNumero,1,nPos-1) )
   nDecimal := Val( SubStr(cNumero,nPos+1,1 ) )

   IF (nDecimal > 5 )
      nDecimal := 1
   ELSEIF (nDecimal == 5 )
      IF (SubStr(cNumero,nPos-1,1)!="0")
         nDecimal := 1
      ELSE
         nDecimal := 0
      ENDIF
   ELSE
      nDecimal := 0
   ENDIF

   nCantidad := nEntero + nDecimal

RETURN nCantidad